zoukankan      html  css  js  c++  java
  • 【LeetCode】95. Unique Binary Search Trees II

    Unique Binary Search Trees II

    Given 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。

    递归思想,依次选择根节点,对左右子序列再分别建树。

    由于左右子序列建树的结果也可能不止一种,需要考虑所有搭配情况。

    vector<TreeNode *> left代表所有valid左子树。

    vector<TreeNode *> right代表所有valid右子树。

    /**
     * Definition for binary tree
     * 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) {
            return Helper(1, n);
        }
        vector<TreeNode *> Helper(int begin, int end)
        {
            vector<TreeNode *> ret;
            if(begin > end)
                ret.push_back(NULL);
            else if(begin == end)
            {
                TreeNode* node = new TreeNode(begin);
                ret.push_back(node);
            }
            else
            {
                for(int i = begin; i <= end; i ++)
                {//root
                    vector<TreeNode *> left = Helper(begin, i-1);
                    vector<TreeNode *> right = Helper(i+1, end);
                    for(int l = 0; l < left.size(); l ++)
                    {
                        for(int r = 0; r < right.size(); r ++)
                        {
                            //new tree
                            TreeNode* root = new TreeNode(i);
                            root->left = left[l];
                            root->right = right[r];
                            ret.push_back(root);
                        }
                    }
                }
            }
            return ret;
        }
    };

  • 相关阅读:
    c# winform连接sql2000实例
    项目部署后水晶报表显示出错
    获取父窗体的工作区域
    字符转换 btye[] 和string
    水晶报表 详细资料全部显示
    c# 获取和取消本地打印队列
    zoj 3329 One Person Game(数学期望)
    poj 1753 Flip Game(枚举)
    SRM 556 DIV2
    zoj 2671 Cryptography(矩阵+线段树)
  • 原文地址:https://www.cnblogs.com/ganganloveu/p/4138344.html
Copyright © 2011-2022 走看看