LintCode-不同的二叉查找树 II

给出n,生成所有由1...n为节点组成的不同的二叉查找树

样例

给出n = 3,生成所有5种不同形态的二叉查找树:

   1           3       3       2      1

    \         /        /         / \         \

     3      2     1         1   3        2

    /      /          \                         \

   2     1          2                         3

分析:以每个数字为head,然后递归产生就行。

代码:

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */
class Solution {
public:
    /**
     * @paramn n: An integer
     * @return: A list of root
     */
    vector<TreeNode *> generateTrees(int n) {
        // write your code here
        vector<TreeNode *> ret = generateTrees(1,n);
        return ret;
    }
    vector<TreeNode*> generateTrees(int start,int end)
    {
        vector<TreeNode*> ret;
        if(start>end)
        {
            ret.push_back(nullptr);
            return ret;
        }
        if(start==end)
        {
            ret.push_back(new TreeNode(start));
            return ret;
        }
        for(int i=start;i<=end;i++)
        {
            vector<TreeNode*> left = generateTrees(start,i-1);
            vector<TreeNode*> right = generateTrees(i+1,end);
            for(auto l:left)
            {
                for(auto r:right)
                {
                    TreeNode* head = new TreeNode(i);
                    head->left = l;
                    head->right = r;
                    ret.push_back(head);
                }
            }
            
        }
        return ret;
    }
};


你可能感兴趣的:(面试,lintcode)