leetcode 106.从中序与后续遍历序列构造二叉树

思路:其实和根据前序遍历和中序遍历来构造二叉树是一样的思路,我们那道题首先确定的就是根节点,也就是说,根节点的位置是很重要的,我们需要知道根节点的位置在哪。前序遍历的特点就是:中左右;中序遍历的特点就是:左中右。我们可以看到,这两种遍历的前两个遍历都是中和左子树,我们就可以联想到,这两种遍历都是遍历一样的结点但是顺序不一样而已。我们从中找到根节点的位置,根据中序遍历,我们就知道了左右子树都是什么元素了。然后就顺藤摸瓜一直找下去就行了。

这里也是一样,后序遍历的特点就是:左右中;而中序遍历是:左中右。他们的后两个是一样的序列但是顺序不一样,我们从中找到根节点也就找到了左右子树在哪了。中序遍历中根节点的位置其实就是后序遍历右子树开始遍历的位置。

然后我们递归到左右子树再查找他们的根节点,然后以此类推。。。

本质上讲就是为了找根节点而已。

我们按照分冶并且递归的办法进行传递构造树即可。

复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        TreeNode root=null;
        root=bianli(root,inorder,postorder);
        return root;
    }
    public TreeNode bianli(TreeNode t,int []a,int []b){
        if(a.length==0||b.length==0)
        return null;
        for(int i=0;i<a.length;i++){
            if(b[b.length-1]==a[i]){
                TreeNode tmp=new TreeNode(a[i]);
                t=tmp;
                int []a_l=Arrays.copyOfRange(a,0,i);
                int []a_r=Arrays.copyOfRange(a,i+1,a.length);
                int []b_l=Arrays.copyOfRange(b,0,i);
                int []b_r=Arrays.copyOfRange(b,i,b.length-1);
                t.left=bianli(t.left,a_l,b_l);
                t.right=bianli(t.right,a_r,b_r);
            }
        }
        return t;
    }
}
相关推荐
GuWenyue8 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
我叫洋洋9 小时前
C ++ [ hello world ]
c语言·c++·算法
奋发向前wcx10 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
战族狼魂13 小时前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
李剑一13 小时前
你用过网易的将军令嘛?它底层实现账号保护的原理相当简单粗暴
算法
Scott9999HH14 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
中达瑞和-高光谱·多光谱14 小时前
1nm到8nm光谱分辨率,你的应用该选哪款光谱相机?
算法·高光谱·高光谱相机
ChaoZiLL15 小时前
我的数据结构4-栈和队列
数据结构
香辣牛肉饭15 小时前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
miller-tsunami15 小时前
顺序表相关知识点
数据结构·顺序表