트리 관련 개인 문제 요약
31316 단어 요약
카탈로그
589 N 포크 트리의 앞 순서 반복
난이도class Solution {
public:
vector<int> preorder(Node* root) {
if(root)
{
res.push_back(root->val);
for(auto node:(*root).children)
preorder(node);
}
return res;
}
private:
vector<int> res;
stack<Node *>
};
법2, 정상적인 교체, 창고를 빌리다class Solution {
public:
vector<int> preorder(Node* root) {
if(!root)
return res;
temp.push(root);
while(!temp.empty())
{
Node *node = temp.top();
temp.pop();
if(node)
res.emplace_back(node->val);
else
continue;
if(!node->children.empty())
for(int i=node->children.size()-1;i>=0; i--)
temp.push(node->children[i]);
}
return res;
}
private:
vector<int> res;
stack<Node*> temp;
};
144 두 갈래 나무의 앞길이 두루 다니다
귀속은 말하지 않겠다. 여기에 비귀속 코드를 동봉한다https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/miao-sha-quan-chang-ba-hou-lang-by-sonp/
98 인증 두 갈래 검색 트리
중등 방법1: 먼저 중간 순서를 두루 훑어보고 하나의 서열을 얻어 이 서열이 점차적으로 증가하는지 보는 것은 일반적인 사고방식에 속한다class Solution {
public:
bool isValidBST(TreeNode* root) {
if(!root)
return true;
buildRes(root);
for(int i=0;i<res.size()-1;i++)
if(!(res[i] < res[i+1]))
return false;
return true;
}
void buildRes(TreeNode* root)
{
if(root)
{
buildRes(root->left);
res.emplace_back(root->val);
buildRes(root->right);
}
}
private:
vector<int> res;
};
방법2: 모든 노드의 값은lower와 upper 사이에 있어야 한다. 왼쪽 트리를 훑어볼 때 upper는 루트 노드이고, 오른쪽 트리를 훑어볼 때 lower는 루트 노드이다.class Solution {
public:
bool helper(TreeNode* root, long long lower, long long upper) {
if (root == nullptr) return true;
if (root -> val <= lower || root -> val >= upper) return false;
return helper(root -> left, lower, root -> val) && helper(root -> right, root -> val, upper);
}
bool isValidBST(TreeNode* root) {
return helper(root, LONG_MIN, LONG_MAX);
}
};
102 두 갈래 나무의 층계가 두루 다니다
중등 방법 1. 대열의 두 가지 기법을 빌리고 기법 하나는 자신의 방법이다. 두 가지 기법의 사고방식은 똑같다. 모두 대열을 빌리는 것이다. 그러나 나의 기법은 비공 노드를 대열에 넣는 것이다. 기법 둘은 모두 대열에 들어가고 대열을 나갈 때 8ms11.7MB를 판단한다.class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(!root)
return res;
myque.push(root);
while(!myque.empty())
{
vector<int> temp;
int size = myque.size();
for(int i=0;i<size;i++)
{
temp.emplace_back(myque.front()->val);
if(myque.front()->left)
myque.push(myque.front()->left);
if(myque.front()->right)
myque.push(myque.front()->right);
myque.pop();
}
res.emplace_back(temp);
}
return res;
}
private:
queue<TreeNode *> myque;
vector<vector<int>> res;
};
쓰기 2 참고 문제 풀이 4ms 11.8MBclass Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
/*if(!root)
return res;*/
myque.push(root);
while(!myque.empty())
{
vector<int> temp;
int size = myque.size();
while(size--)
{
TreeNode *node = myque.front();
myque.pop();
if(!node)
continue;
temp.emplace_back(node->val);
myque.push(node->left);
myque.push(node->right);
}
if(!temp.empty())
res.emplace_back(temp);
}
return res;
}
private:
queue<TreeNode *> myque;
vector<vector<int>> res;
};
방법2: 깊이가 우선이고 위의 방법1은 넓이가 우선이지만 정상적으로 말하자면 넓이가 우선인 것은 한 길을 따라 끝까지 걷고 다시 돌아보는 것이다. 이것은 선순이 반복되는 것과 매우 비슷하다. 그러나 여기서 어떻게 어떤 노드가 같은 층에 있는지 알 수 있겠는가? 변수level을 통해 표기class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
buildRes(res, root, 0);
return res;
}
void buildRes(vector<vector<int>>& vec, TreeNode *root, int level)
{
// ,
if(!root)
return;
// :
, vector
if(level >= vec.size())
vec.emplace_back(vector<int>());
vec[level].emplace_back(root->val);
// level
buildRes(vec, root->left, level+1);
buildRes(vec, root->right, level+1);
}
private:
queue<TreeNode *> myque;
vector<vector<int>> res;
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ansible 추천 학습 참고 자료 정리
"How Ansible works - YouTube"
"Ansible 입문 (전 15회) - 프로그래밍이라면 도트 설치(유료)"
"Ansible을 통한 시스템 구성 관리: 기초부터 Cloud Modules로 AWS ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
class Solution {
public:
vector<int> preorder(Node* root) {
if(root)
{
res.push_back(root->val);
for(auto node:(*root).children)
preorder(node);
}
return res;
}
private:
vector<int> res;
stack<Node *>
};
class Solution {
public:
vector<int> preorder(Node* root) {
if(!root)
return res;
temp.push(root);
while(!temp.empty())
{
Node *node = temp.top();
temp.pop();
if(node)
res.emplace_back(node->val);
else
continue;
if(!node->children.empty())
for(int i=node->children.size()-1;i>=0; i--)
temp.push(node->children[i]);
}
return res;
}
private:
vector<int> res;
stack<Node*> temp;
};
귀속은 말하지 않겠다. 여기에 비귀속 코드를 동봉한다https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/miao-sha-quan-chang-ba-hou-lang-by-sonp/
98 인증 두 갈래 검색 트리
중등 방법1: 먼저 중간 순서를 두루 훑어보고 하나의 서열을 얻어 이 서열이 점차적으로 증가하는지 보는 것은 일반적인 사고방식에 속한다class Solution {
public:
bool isValidBST(TreeNode* root) {
if(!root)
return true;
buildRes(root);
for(int i=0;i<res.size()-1;i++)
if(!(res[i] < res[i+1]))
return false;
return true;
}
void buildRes(TreeNode* root)
{
if(root)
{
buildRes(root->left);
res.emplace_back(root->val);
buildRes(root->right);
}
}
private:
vector<int> res;
};
방법2: 모든 노드의 값은lower와 upper 사이에 있어야 한다. 왼쪽 트리를 훑어볼 때 upper는 루트 노드이고, 오른쪽 트리를 훑어볼 때 lower는 루트 노드이다.class Solution {
public:
bool helper(TreeNode* root, long long lower, long long upper) {
if (root == nullptr) return true;
if (root -> val <= lower || root -> val >= upper) return false;
return helper(root -> left, lower, root -> val) && helper(root -> right, root -> val, upper);
}
bool isValidBST(TreeNode* root) {
return helper(root, LONG_MIN, LONG_MAX);
}
};
102 두 갈래 나무의 층계가 두루 다니다
중등 방법 1. 대열의 두 가지 기법을 빌리고 기법 하나는 자신의 방법이다. 두 가지 기법의 사고방식은 똑같다. 모두 대열을 빌리는 것이다. 그러나 나의 기법은 비공 노드를 대열에 넣는 것이다. 기법 둘은 모두 대열에 들어가고 대열을 나갈 때 8ms11.7MB를 판단한다.class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(!root)
return res;
myque.push(root);
while(!myque.empty())
{
vector<int> temp;
int size = myque.size();
for(int i=0;i<size;i++)
{
temp.emplace_back(myque.front()->val);
if(myque.front()->left)
myque.push(myque.front()->left);
if(myque.front()->right)
myque.push(myque.front()->right);
myque.pop();
}
res.emplace_back(temp);
}
return res;
}
private:
queue<TreeNode *> myque;
vector<vector<int>> res;
};
쓰기 2 참고 문제 풀이 4ms 11.8MBclass Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
/*if(!root)
return res;*/
myque.push(root);
while(!myque.empty())
{
vector<int> temp;
int size = myque.size();
while(size--)
{
TreeNode *node = myque.front();
myque.pop();
if(!node)
continue;
temp.emplace_back(node->val);
myque.push(node->left);
myque.push(node->right);
}
if(!temp.empty())
res.emplace_back(temp);
}
return res;
}
private:
queue<TreeNode *> myque;
vector<vector<int>> res;
};
방법2: 깊이가 우선이고 위의 방법1은 넓이가 우선이지만 정상적으로 말하자면 넓이가 우선인 것은 한 길을 따라 끝까지 걷고 다시 돌아보는 것이다. 이것은 선순이 반복되는 것과 매우 비슷하다. 그러나 여기서 어떻게 어떤 노드가 같은 층에 있는지 알 수 있겠는가? 변수level을 통해 표기class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
buildRes(res, root, 0);
return res;
}
void buildRes(vector<vector<int>>& vec, TreeNode *root, int level)
{
// ,
if(!root)
return;
// :
, vector
if(level >= vec.size())
vec.emplace_back(vector<int>());
vec[level].emplace_back(root->val);
// level
buildRes(vec, root->left, level+1);
buildRes(vec, root->right, level+1);
}
private:
queue<TreeNode *> myque;
vector<vector<int>> res;
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ansible 추천 학습 참고 자료 정리
"How Ansible works - YouTube"
"Ansible 입문 (전 15회) - 프로그래밍이라면 도트 설치(유료)"
"Ansible을 통한 시스템 구성 관리: 기초부터 Cloud Modules로 AWS ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
class Solution {
public:
bool isValidBST(TreeNode* root) {
if(!root)
return true;
buildRes(root);
for(int i=0;i<res.size()-1;i++)
if(!(res[i] < res[i+1]))
return false;
return true;
}
void buildRes(TreeNode* root)
{
if(root)
{
buildRes(root->left);
res.emplace_back(root->val);
buildRes(root->right);
}
}
private:
vector<int> res;
};
class Solution {
public:
bool helper(TreeNode* root, long long lower, long long upper) {
if (root == nullptr) return true;
if (root -> val <= lower || root -> val >= upper) return false;
return helper(root -> left, lower, root -> val) && helper(root -> right, root -> val, upper);
}
bool isValidBST(TreeNode* root) {
return helper(root, LONG_MIN, LONG_MAX);
}
};
중등 방법 1. 대열의 두 가지 기법을 빌리고 기법 하나는 자신의 방법이다. 두 가지 기법의 사고방식은 똑같다. 모두 대열을 빌리는 것이다. 그러나 나의 기법은 비공 노드를 대열에 넣는 것이다. 기법 둘은 모두 대열에 들어가고 대열을 나갈 때 8ms11.7MB를 판단한다.
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(!root)
return res;
myque.push(root);
while(!myque.empty())
{
vector<int> temp;
int size = myque.size();
for(int i=0;i<size;i++)
{
temp.emplace_back(myque.front()->val);
if(myque.front()->left)
myque.push(myque.front()->left);
if(myque.front()->right)
myque.push(myque.front()->right);
myque.pop();
}
res.emplace_back(temp);
}
return res;
}
private:
queue<TreeNode *> myque;
vector<vector<int>> res;
};
쓰기 2 참고 문제 풀이 4ms 11.8MB
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
/*if(!root)
return res;*/
myque.push(root);
while(!myque.empty())
{
vector<int> temp;
int size = myque.size();
while(size--)
{
TreeNode *node = myque.front();
myque.pop();
if(!node)
continue;
temp.emplace_back(node->val);
myque.push(node->left);
myque.push(node->right);
}
if(!temp.empty())
res.emplace_back(temp);
}
return res;
}
private:
queue<TreeNode *> myque;
vector<vector<int>> res;
};
방법2: 깊이가 우선이고 위의 방법1은 넓이가 우선이지만 정상적으로 말하자면 넓이가 우선인 것은 한 길을 따라 끝까지 걷고 다시 돌아보는 것이다. 이것은 선순이 반복되는 것과 매우 비슷하다. 그러나 여기서 어떻게 어떤 노드가 같은 층에 있는지 알 수 있겠는가? 변수level을 통해 표기
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
buildRes(res, root, 0);
return res;
}
void buildRes(vector<vector<int>>& vec, TreeNode *root, int level)
{
// ,
if(!root)
return;
// :
, vector
if(level >= vec.size())
vec.emplace_back(vector<int>());
vec[level].emplace_back(root->val);
// level
buildRes(vec, root->left, level+1);
buildRes(vec, root->right, level+1);
}
private:
queue<TreeNode *> myque;
vector<vector<int>> res;
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ansible 추천 학습 참고 자료 정리"How Ansible works - YouTube" "Ansible 입문 (전 15회) - 프로그래밍이라면 도트 설치(유료)" "Ansible을 통한 시스템 구성 관리: 기초부터 Cloud Modules로 AWS ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.