Unique Binary Search Trees II 构造出所有的二分搜索树

来源:互联网 发布:数据鲜活度 编辑:程序博客网 时间:2024/06/18 08:43

如果对Unique Binary Search Trees 不熟悉的,请先看我之前的post.


在这里,我们不仅要计算出不同的二分树的个数,还需要构造出所有符合要求的二分树。

回忆之前的迭代细节:

count(n) = count (0) + count(n - 1 - 0) + .. + count(i) + count(n - 1 - i) + .. + count(n - 1) * count(0)

在这里就转变成了:

要构造一个节点数为n 的树: 等于先构造它 子树 subTree(1, i - 1 ) 和 subTree(i + 1, n), 这个子树的root = node( i )


代码:

    public List<TreeNode> generateTrees(int n) {        if (n <= 0) {            return new ArrayList<>();        }        return doGenerateTrees(1, n);    }    private List<TreeNode> doGenerateTrees(int begin, int end) {        List<TreeNode> store = new ArrayList<>();        if (begin > end) {            store.add(null);// attention: must add null            return store;        }        for (int i = begin; i <= end; i++) {            List<TreeNode> leftList = doGenerateTrees(begin, i - 1);            List<TreeNode> rightLIst = doGenerateTrees(i + 1, end);            for (TreeNode leftNode : leftList) {                for (TreeNode rightNode : rightLIst) {                    TreeNode head = new TreeNode(i);                    head.left = leftNode;                    head.right = rightNode;                    store.add(head);                }            }        }        return store;    }


1 0
原创粉丝点击