腾讯音乐 含有重复元素的前序和中序的二叉树构造

    public ArrayList<TreeNode> getBinaryTrees(ArrayList<Integer> preOrder, ArrayList<Integer> inOrder) {
        int n = preOrder.size();
        return createTree(preOrder, inOrder, 0, n - 1, 0, n - 1);
    }

    private ArrayList<TreeNode> createTree(ArrayList<Integer> preOrder, ArrayList<Integer> inOrder, int pl, int ph, int il, int ih) {
        if (pl > ph) {
            return new ArrayList<>();
        }
        ArrayList<TreeNode> res = new ArrayList<>();
        for (int i = il; i <= ih; i++) {
            if (preOrder.get(pl).equals(inOrder.get(i))) {
                int leftNum = i - il;
                ArrayList<TreeNode> leftChildes = createTree(preOrder, inOrder, pl + 1, pl + leftNum, il, i- 1);
                ArrayList<TreeNode> rightChildes = createTree(preOrder, inOrder, pl + leftNum + 1, ph, i + 1, ih);
                for (TreeNode leftChild : leftChildes) {
                    for (TreeNode rightChild : rightChildes) {
                        TreeNode p = new TreeNode(preOrder.get(pl));
                        p.left = leftChild;
                        p.right = rightChild;
                        res.add(p);
                    }
                }
            }
        }
        return res;
    }

#腾讯音乐娱乐笔试#
全部评论
老哥代码是不是有点问题
点赞 回复
分享
发布于 2022-09-28 20:28 江苏

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务