关闭

95. Unique Binary Search Trees II

53人阅读 评论(0) 收藏 举报
分类:

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

思路:跟上题类似,只不过要递归打出所有可能的组合。本质上就是依次以1到n为根节点构建BST,在构建过程中对于当i为根节点的时候,又分别对[1,i-1]和[i+1,n]构建BST。 注意递归到底的返回结果就是左边或右边为空,或者到叶子节点就是它本身。递归到底的情况是basically需要确定的地方。

class Solution {
public:
    vector<TreeNode*> generateTrees(int n) {
        if(n==0) return {}; //什么鬼?
        return helper(1, n);
    }
    
    vector<TreeNode*> helper(int begin, int end)
    {
        vector<TreeNode*> result; //递归到最底下就是返回单个节点
        if(begin > end)
        {
            result.push_back(NULL);
            return result;
        }
        
        if(begin == end)
        {
            result.push_back(new TreeNode(begin));
            return result;
        }
        
        for(int i = begin; i <= end; i++) //分别以begin做根节点到end做根节点
        {
            vector<TreeNode*> leftList = helper(begin, i-1);
            vector<TreeNode*> rightList = helper(i+1, end);
            for(int l = 0; l < leftList.size(); l++)
                for(int r = 0; r < rightList.size(); r++)
                {
                    TreeNode* root = new TreeNode(i);
                    root->left = leftList[l];
                    root->right = rightList[r];
                    result.push_back(root);
                }
        }
        
        return result;
    }
};


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:69239次
    • 积分:1
    • 等级:
    • 排名:千里之外
    • 原创:126篇
    • 转载:8篇
    • 译文:0篇
    • 评论:5条
    最新评论