构造所有二叉查找树

来源:互联网 发布:python asyncio.wait 编辑:程序博客网 时间:2024/05/22 03:23

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

您在真实的面试中是否遇到过这个题? 
Yes
样例

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

1         3     3       2    1 \       /     /       / \    \  3     2     1       1   3    2 /     /       \                \2     1         2                3
/** * 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*>res=helper(1,n);        return res;    }    vector<TreeNode*> helper(int start,int end){        vector<TreeNode*>res;        if(start>end){            res.push_back(NULL);            return res;        }        if(start==end){            res.push_back(new TreeNode(start));            return res;        }        if(start<end){            for(int i=start;i<=end;i++){                vector<TreeNode*>left=helper(start,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++){                        TreeNode*root=new TreeNode(i);                        root->left=left[l];                        root->right=right[r];                        res.push_back(root);                    }                }            }             return res;        }           }    };


0 0