剑指offer_重构二叉树

Posted chenxionghfut

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer_重构二叉树相关的知识,希望对你有一定的参考价值。

      题目:输入某二叉树的前序遍历和中序遍历的结果,假设结果中不包含重复元素,请重建该二叉树。

              思路:前序:访问顺序:根-->左子树-->右子树

                        后序:访问顺序:左子树-->根-->右子树

                       1.要想重建一个序列的二叉树,就要知道每序列中每一个结点的左子树和右子树。

                       2.前序序列的第一个结点值就是根结点的值,根据这个根结点的值到遍历中序序列,找到这个结点,则这个结点的左边序列

                      为根的左子树,右边序列为根的右子树。

                     代码如下:

                        

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        return reConstructBinaryTreeOne(pre,0,pre.length-1,in,0,in.length-1);
         
    }
         
        private TreeNode reConstructBinaryTreeOne(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(pre[startPre]==in[i])
                                                         //根结点的左子树     
                root.left=reConstructBinaryTreeOne(pre,startPre+1,i-startIn+startPre,in,startIn,i-1);
                                                        //根结点的右子树
                root.right=reConstructBinaryTreeOne(pre,i-startIn+startPre+1,endPre,in,i+1,endIn);
            }}
        return root;
     
}
}

以上是关于剑指offer_重构二叉树的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer - 面试题7:重构二叉树 (力扣 - 105从前序与中序遍历序列构造二叉树)

剑指offer 面试27题

剑指offer二叉树的镜像python

剑指offer二叉树中和为某一值的路径python

剑指offer 面试28题

剑指offer_39——平衡二叉树