95. Unique Binary Search Trees II

原创 2017年01月03日 00:15:26

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

For example,
Given n = 3, your program should return all 5 unique BST’s shown below.

   1         3     3      2      1
    \       /     /      / \      \
     3     2     1      1   3      2
    /     /       \                 \
   2     1         2                 3

解题思路:
类似96. Unique Binary Search Trees的思路,二叉搜索树(BST)的建树原则如下:
以i为跟根节点的树,其左子树由[1,i-1]构成,右子树由[i+1, n]构成。
由于要输出BST序列,借鉴动态规划的做法,对从1~n的每个序列都进行建树:
1. 当子树的节点值比根节点值小的时候,该子树为空。
2. 递归建立左右子树,根节点连接左右子树。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<TreeNode*> generateTrees(int n) {
        vector<TreeNode *> result;
        if (n == 0) return result;
        return generateTrees(1, n);
    }

    vector<TreeNode*> generateTrees(int start, int end) {
        vector <TreeNode *> result;

        if (start > end) {
            result.push_back(nullptr);
            return result;
        }

        for (int k = start; k <= end; k++) {
            vector<TreeNode *> leftSubs = generateTrees(start, k - 1);
            vector<TreeNode *> rightSubs = generateTrees(k + 1, end);

            for (auto i : leftSubs) {
                for (auto j : rightSubs) {
                    TreeNode *node = new TreeNode(k);
                    node->left = i;
                    node->right = j;
                    result.push_back(node);
                }
            }
        }
        return result;
    }
};
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

leetcode_middle_98_95. Unique Binary Search Trees II

题意: 给一个数n,返回所有能存储1到n的二叉查找树。 分析: 这是个好题,应该考虑深度优先搜索或者动态规划。 递归好理解: 遍历1到n每个数做结点。 对于每一个根节点,将左边的结点能构造出的...

[Leetcode] 95. Unique Binary Search Trees II 解题报告

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

LeetCode 95: Unique Binary Search Trees II

Unique Binary Search Trees IIGiven n, generate all structurally unique BST’s (binary search trees) t...

算法分析与设计第五周习题:95. Unique Binary Search Trees II

与96题的对比:        95题是96题Unique Binary Search Trees的升级版,95题增加了构建出所有树的要求,而不仅仅是计算树的数量。对于96题,我们可以轻易得出树数量...

[LeetCode]95.Unique Binary Search Trees II

【题目】 Given n, generate all structurally unique BST's (binary search trees) that store values 1....

Leetcode 95. Unique Binary Search Trees II及二叉树最大最小深度镜像树总结

95. Unique Binary Search Trees IIDescriptionHintsSubmissionsSolutionsGiven an integer n, generate al...

Leetcode 95 Unique Binary Search Trees II

给出n,生成所有存储1-n共n个数的结构上不重复的二叉查找树。

95. Unique Binary Search Trees II

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

LeetCode --- 95. Unique Binary Search Trees II

题目链接:Unique Binary Search Trees II Given n, generate all structurally unique BST's (binary search t...

95. Unique Binary Search Trees II

Given an integer n, generate all structurally unique BST's (binary search trees) that store values...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)