Unique Binary Search Trees II

来源:互联网 发布:潘粤明和董洁 知乎 编辑:程序博客网 时间:2024/06/15 21:33

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
/** * 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 solve(1,n);    }    vector<TreeNode *> solve(int begin,int end)    {        vector<TreeNode *> result;                if(begin>end)            result.push_back(NULL);        else        {            for(int i = begin;i<=end;i++)            {                vector<TreeNode *> l = solve(begin,i-1);                vector<TreeNode *> r = solve(i+1,end);                for(int j = 0;j<l.size();j++)                {                    for(int k = 0;k<r.size();k++)                    {                        TreeNode *node = new TreeNode(i);                        node->left = l[j];                        node->right = r[k];                        result.push_back(node);                    }                }            }        }        return result;    }};
这里我一开始是将node的定义放在for循环外面的,然后在for循环里面进行left和right的赋值,也就是我重复用这个node,然后push到result里

可是这样不对,我后来也没有想明白为什么不对。。一个指针,我用另一个指针的值对其赋值。


0 0