트리 관련 개인 문제 요약
                                            
 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에 따라 라이센스가 부여됩니다.