问答

当前位置
  • 首页
  • 问答
  • Unique Binary Search Tree II 请教一个问题

Unique Binary Search Tree II 请教一个问题

  • Ta: 衡助教

想问一下为什么我的代码如果把root 初始化放到左右子树遍历循环的外面就会报错而放到循环里面就能得到正确结果呢? 请指教 多谢

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<TreeNode> generateTrees(int n) {
        List<TreeNode> res = new ArrayList<>();
        if (n <= 0) {
            return res;
        }
        res = buildTree(1, n);
        return res;
    }

    private List<TreeNode> buildTree(int low, int high) {
        List<TreeNode> level = new ArrayList<>();
        for (int i = low; i <= high; i++) {
            TreeNode root = new TreeNode(i);// 这一行!!!
            List<TreeNode> leftSub = buildTree(low, i - 1); // null
            List<TreeNode> rightSub = buildTree(i + 1, high); // buildTree(2, 3) 2->3 3->2
            for (TreeNode leftNode : leftSub) { // [null]
                for (TreeNode rightNode : rightSub) { //[2, 3]
                                    // TreeNode root = new TreeNode(i);// 这一行!!!
                    level.add(root); // root: 1 root.left: null 1 -> 2 -> 3
                    root.left = leftNode;
                    root.right = rightNode;
                }
            }
        }

        if (level.size() == 0) {
            level.add(null);
        }
        System.out.println("size: " + level.size());
        return level;
    }
}

2 个回复

2019-09-06 Augus

搞明白了,我的root节点没有更新,所以left和right指向的一直都是原来的root,只把最后一组有效的value保留下来了。


2019-09-09 carry

嗯,是的。明白了就好。

我来回答

您没有权限

为提高问答质量,问答版块发言权限只向九章学员开放

登录 注册

© Jiu Zhang 2013-. All rights reserved. 京ICP备16004690号-1