题解 | #重建二叉树#

重建二叉树

http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6

import java.util.*;
/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        //递归找到左右子树
        if(pre.length==0){
            return null;
        }
        int val = pre[0];
        if(pre.length==1){
            return new TreeNode(val);
        }
        //找到根节点 先放入
        TreeNode  root = new TreeNode(val);
        int index=0;
        for(int i=0;i<in.length;i++){
            if(val==in[i]){
                index =i;
                break;
            }
        }
        //递归进行拼接 左右子树  注意区间范围
        //注意使用Arrays.copyOfRange  考到新的数组中 截取长度
        root.left = reConstructBinaryTree(Arrays.copyOfRange(pre,1,index+1),Arrays.copyOfRange(in,0,index));
        root.right = reConstructBinaryTree(Arrays.copyOfRange(pre,index+1,pre.length),Arrays.copyOfRange(in,index+1,in.length));
                    return root;
        }
}
放入根节点,再在中序遍历中找到根节点的位置,因为中序遍历根节点之前的是他的左子树,根节点之后的是他的右子树,然后进行递归依次进行拼接 
全部评论

相关推荐

11-13 20:32
门头沟学院 Java
面向未来编程code:我没看到他咋急,他不就问你个问题。。。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务