第一步先找到前序遍历第一个数字在中序遍历中节点的位置
第二步把关键数据直接拷贝到递归里面
代码如下:
class Solution {
//java递归简洁版
public TreeNode buildTree(int[] preorder, int[] inorder) {
//为后面的递归做准备,当返回的左子树或者右子树为null时,就返回null
if(preorder.length==0||inorder.length==0){
return null;
}
//根节点为前序的第一个结点
TreeNode root=new TreeNode(preorder[0]);
for(int i=0;i<preorder.length;i++){
if(preorder[0]==inorder[i]){
//找到了根节点后,就运用递归把左子树和右子树再放入递归中
root.left=buildTree(Arrays.copyOfRange(preorder,1,i+1),Arrays.copyOfRange(inorder,0,i));
root.right=buildTree(Arrays.copyOfRange(preorder,i+1,preorder.length),Arrays.copyOfRange(inorder,i+1,inorder.length));
}
}
return root;
}
}
总结:哈哈就是太耗费内存,双双百分之5 哈哈~~~~~~~