您的位置:首页 > Web前端

剑指offer—重建二叉树

2017-12-06 10:25 375 查看
题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre==null || in==null) return null;
return reConstructBinaryTreeCore(pre,in,0,pre.length-1,0,in.length-1);
}
private TreeNode reConstructBinaryTreeCore(int[] pre,int[] in, int preStart,int preEnd,int inStart,int inEnd){
if(preStart>preEnd || inStart>inEnd) return null;
int temp = inStart;
TreeNode treeNode = new TreeNode(pre[preStart]);
while(temp<in.length && pre[preStart]!=in[temp]) temp++;
treeNode.left = **reConstructBinaryTreeCore(pre,in,preStart+1,preStart+temp-inStart,inStart,temp-1);
treeNode.right = reConstructBinaryTreeCore(pre,in,preStart+temp+1-inStart,preEnd,temp+1,inEnd)**;
return treeNode;
}
}


思路:思路比较简单,利用递归,前序遍历序列的首元素是中序遍历序列的中间元素将中序遍历序列分成左右两部分,通过中序遍历序列左右两部分的元素个数推断其对应的前序序列,本题关键代码是图中加粗部分代码,耐心一点,仔细推导
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: