重建二叉树--剑指offer04(java实现)
作者:互联网
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
解题思路
使用递归操作,将中序先序的结果分解。
找到当前的中间结点1,然后遍历中序找到对应结点的位置,将前序与中序分成左右子树,传入递归中即可。
源码
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
TreeNode root=a(pre,in,0,pre.length-1,0,in.length-1);
return root;
}
public static TreeNode a(int[] pre,int[] mid,int pbegin,int pend,int mbegin,int mend)
{
if(pbegin > pend || mbegin > mend)
return null;
TreeNode t = new TreeNode(pre[pbegin]);
int i = 0;
while(mid[i] != pre[pbegin])
{
i++;
}
t.left = a(pre,mid,pbegin+1,pbegin+i-mbegin,mbegin,i-1);
t.right = a(pre,mid,i-mbegin+pbegin+1,pend,i+1,mend);
return t;
}
标签:pre,遍历,java,pbegin,int,中序,offer04,二叉树,TreeNode 来源: https://blog.csdn.net/weixin_43728163/article/details/100174210