重建二叉树

Posted heaveneleven

tags:

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

题目:

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

例如,给出

前序遍历 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 }

 

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

4.重建二叉树

[编程题]重建二叉树

《剑指offer》— JavaScript重建二叉树

重建二叉树

重建二叉树-剑指Offer

用前序和中序重建二叉树 python