剑指offer:重建二叉树(dfs)
重建二叉树
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&tqId=11157&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey
题意:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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) {
TreeNode t=dfs(0,pre.length-1,0,in.length-1,pre,in);
return t;
}
public TreeNode dfs(int l1,int r1,int l2,int r2,int [] pre,int [] in){
int a=pre[l1],b=0;
for(int i=l2;i<=r2;i++)
if(in[i]==a)
b=i;
TreeNode t = new TreeNode(in[b]);
if(b==l2) {t.left=null;}
else t.left=dfs(l1+1,l1+(b-l2),l2,b-1,pre,in);
if(b==r2) t.right=null;
else t.right=dfs(l1+b-l2+1,r1,b+1,r2,pre,in);
return t;
}
}
查看10道真题和解析
