leetcode95-Unique Binary Search Trees II(가능한 모든 BST 출력)
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;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.