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

重建二叉树

时间:2018-06-27 13:31:20      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:style   ons   turn   结果   return   tree   private   ||   返回   

重建二叉树

  

  题目描述

  输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
  例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
 
  思路:前序遍历:中左右,中序遍历:左中右。
  则易知前序序列中第一个值为根节点root,
  1,遍历中序遍历找到在中序序列中的root的索引,则root左边的序列为左子树的中序遍历结果,root右边的序列为右子树的中序遍历结果。
  2,由第一步中可得到左子树中序遍历长度,在前序遍历中划出左子树的起止索引。
  3,同理可得前序遍历中右子树的起止索引
  4,递归执行上述过程。
 
  
 1 public class Solution {
 2     public TreeNode reConstructBinaryTree(int [] pre, int [] in) {
 3         TreeNode  root = help(pre,in,0,pre.length-1,0,in.length-1);
 4         return root;
 5     }
 6     private TreeNode help(int[] pre, int[] in,int prebeg,int preend,int inbeg,int inend ){
 7         if(prebeg>preend||inbeg>inend)
 8             return null;
 9         TreeNode root = new TreeNode(pre[prebeg]);
10         int index = 0;
11         for(int i=0;i<in.length;i++){   
12             if(in[i]==pre[prebeg]){
13                 index = i;
14                 break;
15             }
16         }
17         root.left = help(pre,in,prebeg+1,prebeg+(index-inbeg),inbeg,index-1);
18         root.right = help(pre,in,prebeg+(index-inbeg)+1,preend,index+1,inend);
19         return root;
20     }
21 }

 

  

重建二叉树

标签:style   ons   turn   结果   return   tree   private   ||   返回   

原文地址:https://www.cnblogs.com/ztqup666/p/9233325.html

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