码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer_重构二叉树

时间:2018-01-18 01:05:19      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:offer   sso   process   思路   solution   ons   star   nod   def   

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

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

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

                       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   sso   process   思路   solution   ons   star   nod   def   

原文地址:https://www.cnblogs.com/ChenXionghfut/p/8306683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!