leetcode95-Unique Binary Search Trees II(가능한 모든 BST 출력)

3853 단어 LeetCodedp
문제 설명:
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, 2, 3, 4,...i,.. n시, 구조 BST: i를 뿌리 노드로 하는 나무로 왼쪽 나무는 [1,..., i-1]로 구성되고 오른쪽 나무는 [i+1,..., n]로 구성된다.
/** * Definition for a binary tree node. * 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) {
        vector<TreeNode*> ret;
        if(n==0) return ret;
        return generatebst(1, n);//  1 root , n root  
    }
    vector<TreeNode*> generatebst(int low, int high)
    {
        vector<TreeNode*> ret;
        if(low > high)
        {
            ret.push_back(NULL); 
            return ret;// 
        }
        for(int i=low;i<=high;i++)
        {//i 
            vector<TreeNode*> leftTree = generatebst(low, i-1);// [1, i-1]  
            vector<TreeNode*> rightTree = generatebst(i+1, high);// [i+1, n]  
            for(int j=0;j<leftTree.size();j++)
            {// leftTree.size() ,j 
                for(int k=0;k<rightTree.size();k++)
                {// rightTree.size() ,k 
                    TreeNode* root = new TreeNode(i);
                    // leftTree[j] , rightTree[k]
                    // , i BST。
                    root->left = leftTree[j];
                    root->right = rightTree[k];
                    ret.push_back(root);
                }
            }
        }
        return ret;
    }
};

좋은 웹페이지 즐겨찾기