剑指offer:004重建二叉树 附:java实现

题目描述

重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

思想:

根据前序遍历的特性:左右根

中序遍历的特性:左根右

找到根 然后依次递归 恢复整个树

java实现


public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
        return root;
    }
    //前序遍历{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
    private TreeNode reConstructBinaryTree(int [] pre,int startPre,int endPre,int [] in,int startIn,int endIn) {
         
        if(startPre>endPre||startIn>endIn)
            return null;
        TreeNode root=new TreeNode(pre[startPre]);  //树顶
         
        for(int i=startIn;i<=endIn;i++) //左叶子开始 到 右叶子
            if(in[i]==pre[startPre]){  //中序中找到根  然后左右节点递归
                
              root.left=reConstructBinaryTree(pre,startPre+1,startPre+i-startIn,in,startIn,i-1); // pre,前+1,前+i-中,in,startin,i-1
         root.right=reConstructBinaryTree(pre,i-startIn+startPre+1,endPre,in,i+1,endIn);
   //pre,前+i-中+1,endpre,in,i+1,endin          
                      break;
            }
                 
        return root;
    }
}
发布了69 篇原创文章 · 获赞 5 · 访问量 2191

猜你喜欢

转载自blog.csdn.net/qq_42139889/article/details/104338411