• 【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;
        }
    };

  • 相关阅读:
    软件工程 2016.6.28 日报
    软件工程课程总结
    工大助手--项目总结
    工大助手--加权平均分计算
    工大助手--数据查询
    7.5
    7月4日日报
    7.3日报
    6.30日报
    6.29.日报
  • 原文地址:https://www.cnblogs.com/ganganloveu/p/4138344.html
Copyright © 2020-2023  润新知