重建二叉树
Posted ztqup666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重建二叉树相关的知识,希望对你有一定的参考价值。
重建二叉树
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如输入前序遍历序列{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 }
以上是关于重建二叉树的主要内容,如果未能解决你的问题,请参考以下文章