NC12题解 | #重建二叉树#

重建二叉树

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

递归解决

重要的是需要传递四个参数

public class Solution{
	public TreeNode reConstructBinaryTree(int[] pre, int[] in) {
        if (pre == null || in == null || pre.length == 0 || in.length == 0 || pre.length != in.length) {
            return null;
        }
        return construct(pre, in, 0, pre.length, 0, in.length);
    }

    public TreeNode construct(int[] pre, int[] in, int preS, int preE, int inS, int inE) {
        if (preS > preE) {
            return null;
        }
        if (preS == preE && preS < pre.length) {
            return new TreeNode(pre[preS]);
        }
        int index = 0;
        //根值
        int rootVal = in[preS];
        TreeNode root = new TreeNode(rootVal);
        //在in中定位到pre的第一个元素
        for (int i = 0; i < in.length; i++) {
            if (in[i] == pre[preS]) {
                index = i;
            }
        }
        //左个数
        int lLen = index - inS;
        //右个数
        int rLen = inE - index;
        //左子节点
        root.left = construct(pre, in, preS + 1, preS + lLen, inS, index - 1);
        //右子节点
        root.right = construct(pre, in, preS + lLen + 1, preE, index + 1, inE);
        return root;
    }
}

class TreeNode {
   int val;
   TreeNode left;
   TreeNode right;
   TreeNode(int x) { val = x; }
}
全部评论

相关推荐

AAA专业长城贴瓷砖刘大爷:这样的简历我会直接丢进垃圾桶,花里胡哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务