美文网首页TREEDP
95. Unique Binary Search Trees I

95. Unique Binary Search Trees I

作者: DrunkPian0 | 来源:发表于2017-04-02 18:28 被阅读10次

    Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.

    这题是NP问题的套路,for循环中调用递归。在NQUEENS中有总结。

    我感觉这题思维还挺难的,套用一般的DFS套路还需要想一想,就是树怎么拼接起来的。跟前面一题一样,
    我总是会感觉在dfs中先调用递归函数,后面的东西会执行不到,其实是不对的,可以看之前提的问题

        public List<TreeNode> generateTrees(int n) {
            if(n == 0 ) return new ArrayList<>();
            //以root=1开始,root=n结束
            return dfs(1, n);
        }
    
        private List<TreeNode> dfs(int left, int right) {
            List<TreeNode> res = new ArrayList<>();
            if (left > right) {
                res.add(null);
                return res;
            }
            for (int i = left; i <= right; i++) {
                //左子树由[left,i-1]的节点构成,右子树由[i+1,right]的节点构成
                List<TreeNode> leftSide = dfs(left, i - 1);
                List<TreeNode> rightSide = dfs(i + 1, right);
                for (TreeNode lt : leftSide)
                    for (TreeNode rt : rightSide) {
                        TreeNode root = new TreeNode(i);
                        root.left = lt;
                        root.right = rt;
                        res.add(root);
                    }
            }
            return res;
        }
    
    

    构造树时两边要遍历所有左右的匹配,然后接到根上面。从两个for循环构造树的过程中可以体会到为什么卡特兰数是要相乘的。

    相关文章

      网友评论

        本文标题:95. Unique Binary Search Trees I

        本文链接:https://www.haomeiwen.com/subject/tsbgottx.html