Leetcode95. 不同的二叉搜索樹 II

給定一個整數 n,生成所有由 1 … n 爲節點所組成的二叉搜索樹。

示例:

輸入: 3
輸出:
[
[1,null,3,2],
[3,2,null,1],
[3,1,null,null,2],
[2,1,3],
[1,null,2,null,3]
]
解釋:
以上的輸出對應以下 5 種不同結構的二叉搜索樹:

1 3 3 2 1
\ / / / \
3 2 1 1 3 2
/ / \
2 1 2 3

tips:使用遞歸

class Solution {
public:
    vector<TreeNode*> generateTrees(int n) {
        if(n==0) {
            vector<TreeNode*> res;
            return res;
        }
        return recursiveGenerateTree(1,n);
    }
    vector<TreeNode*> recursiveGenerateTree(int start,int n) {
        vector<TreeNode*> res;
        if(n<=0) {
            res.push_back(NULL);   
            return res; 
        } 
        if(n==1) {
            TreeNode* root=new TreeNode(start);
            res.push_back(root);
            return res;
        }
        for (int i = start; i < n+start; i++)
        {
            
            vector<TreeNode*> left=recursiveGenerateTree(start,i-start);
            vector<TreeNode*> right=recursiveGenerateTree(i+1,n-i+start-1);
            if(n==3)
                cout<<left.size()<<right.size()<<endl;
            for (int j = 0; j < left.size(); j++)
            {
                for (int k = 0; k < right.size(); k++)
                {
                    TreeNode* root=new TreeNode(i);
                    root->left = left[j];
                    root->right = right[k];
                    res.push_back(root);
                }
            }
        }
        return res;
    }
};

發佈了94 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章