重建二叉树
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 }
以上是关于重建二叉树的主要内容,如果未能解决你的问题,请参考以下文章