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

重建二叉树

时间:2020-04-17 00:02:57      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:return   code   class   tree   length   col   http   bsp   while   

题目:

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:

     3
    / \
  9  20
 / \
15 7
 

限制:

0 <= 节点个数 <= 5000

 

解答:

前序遍历的第一个节点为根节点,可以将中序遍历结果分成左右两拨,左边一拨能得到左节点,右边的能得到右节点,每一拨的节点要跟前序遍历中节点一样,只是顺序不同;整个过程递归完成;

 技术图片

 1 public class Solution {
 2     public TreeNode reConstructBinaryTree(int [] pre, int [] in) {
 3         return find(pre, 0, pre.length - 1, in, 0, in.length - 1);
 4     }
 5     private TreeNode find(int [] pre, int a1, int b1, int [] in, int a2, int b2){
 6         if(a1 > b1 || a2 > b2){
 7             return null;
 8         }
 9         int v = pre[a1];
10         TreeNode node = new TreeNode(v);
11         int i = 0;
12         while(in[i + a2]!=v){i++;}
13         node.left  = find(pre, a1 + 1, a1 + i, in, a2, a2 + i - 1);
14         node.right = find(pre, a1 + i + 1, b1, in, a2 + i + 1, b2);
15         return node;
16     }
17 }

 

重建二叉树

标签:return   code   class   tree   length   col   http   bsp   while   

原文地址:https://www.cnblogs.com/heaveneleven/p/12715488.html

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