题解 | #重建二叉树#

重建二叉树

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

import java.util.*;

public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre, int [] vin) {

        if(pre.length == 0){
            return null;
        }
        if (pre.length == 1){
            return new TreeNode(pre[0]);
        }
        if (pre.length == 2){
            TreeNode root = new TreeNode(pre[0]);
            TreeNode child = new TreeNode(pre[1]);
            if (pre[0] == vin[0]){
                root.right = child;
            }else {
                root.left = child;
            }
            return root;
        }

        ArrayList<Integer> left = new ArrayList<>();
        ArrayList<Integer> right = new ArrayList<>();

        boolean isLeft = true;
        for (int i : vin) {
            if (i==pre[0]){
                isLeft = false;
                continue;
            }
            if (isLeft){
                left.add(i);
            }else {
                right.add(i);
            }
        }
        int[] preLeft = new int[left.size()];
        int[] preRight = new int[right.size()];
        for (int i = 0; i < preLeft.length; i++) {
            preLeft[i] = pre[i+1];
        }
        for (int i = 0; i < preRight.length; i++) {
            preRight[i] = pre[i+1+preLeft.length];
        }

        int[] vinLeft = new int[left.size()];
        int[] vinRight = new int[right.size()];

        for (int i = 0; i < left.size(); i++) {
            vinLeft[i] = left.get(i);
        }

        for (int i = 0; i < right.size(); i++) {
            vinRight[i] = right.get(i);
        }

        TreeNode leftNode = preLeft.length==0?null: reConstructBinaryTree(preLeft,vinLeft);
        TreeNode rightNode = preRight.length==0?null:reConstructBinaryTree(preRight,vinRight);

        TreeNode rootNode = new TreeNode(pre[0]);
        rootNode.left = leftNode;
        rootNode.right = rightNode;
        return rootNode;
    }


}

    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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