1. 程式人生 > 實用技巧 >LeetCode——不同的二叉搜尋樹 II

LeetCode——不同的二叉搜尋樹 II

Q:給定一個整數 n,生成所有由 1 ... n 為節點所組成的 二叉搜尋樹 。

A:遞迴解決這個問題,分別把每個點作為root,然後把子樹連上去。

    public List<TreeNode> generateTrees(int n) {
        if (n == 0)
            return new LinkedList<>();
        return generate(1, n);
    }

    private List<TreeNode> generate(int start, int end) {
        List<TreeNode> alltrees = new LinkedList<>();
        if (start > end) {
            alltrees.add(null);
            return alltrees;
        }
        for (int i = start; i <= end; i++) {//每個點作為根節點
            List<TreeNode> leftTree = generate(start, i - 1);//所有可能的左子樹集合list
            List<TreeNode> rightTree = generate(i + 1, end);//所有可能的右子樹集合list
            for (TreeNode l : leftTree) {
                for (TreeNode r : rightTree) {
                    TreeNode root = new TreeNode(i);
                    root.left = l;
                    root.right = r;
                    alltrees.add(root);
                }
            }
        }
        return alltrees;
    }