题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
java
public static TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre==null||in==null){
return null;
}
TreeNode root = build(pre,0,pre.length-1,in,0,in.length-1);
return root;
}
public static TreeNode build(int [] pre,int startpre,int endpre,int [] in,int startin,int endin){
if(startpre>endpre||startin>endin){
return null;
}
TreeNode root = new TreeNode(pre[startpre]);
if(startin==endpre&&startpre==endin){
root.left=null;
root.right=null;
return root;
}
int rootindex = -1;
for (int i = 0; i <in.length ; i++) {
if(in[i]==pre[startpre]){
rootindex=i;
break;
}
}
root.left = build(pre,startpre+1,startpre+rootindex-startin,in,startin,rootindex-1);
root.right = build(pre,rootindex-startin+startpre+1,endpre,in,rootindex+1,endin);
return root;
}
python
class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre, tin):
# write code here
if not pre or not tin:
return None
root = TreeNode(pre[0])
index = tin.index(pre[0])
root.left = self.reConstructBinaryTree(pre[1:index+1],tin[:index])
root.right = self.reConstructBinaryTree(pre[index+1:],tin[index+1:])
return root
还是Python大法好啊