LetCode 94 두 갈래 나무에서 순서대로 반복되는 비귀속 통속적이고 알기 쉬운 만능 템플릿 방법
13519 단어 데이터 구조와 알고리즘
LetCode 94 두 갈래 나무에서 순서대로 반복되는 비귀속 통속적이고 알기 쉬운 만능 템플릿 방법
앞뒤 범람하는 만능 모형법 뒤뒤 범람하는 만능 모형법
1. 두 갈래 나무에 차례대로
중서가 두루 흐르는 순조로운 것은 왼쪽 나무, 뿌리 노드, 오른쪽 나무다.귀환은 주로 귀환 구조와 귀환 종결 조건이다.
귀속 구조: 그러면 귀속의 순서는 먼저 왼쪽 나무를 훑어보고 뿌리 노드를 보존하며 오른쪽 나무를 훑어보는 것이다.귀속 종료 조건: 명확한 종료 조건이 없기 때문에 귀속 조건은 NULL을 만나면 귀환하면 된다.
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
func(root,res);
return res;
}
void func(TreeNode* root, vector<int>& res)
{
if(root==NULL)
return ;
func(root->left,res);
res.push_back(root->val);
func(root->right,res);
}
};
2. 비귀속 두 갈래 나무 중 순서대로 만능 템플릿법
비귀속법에 대해 난이도가 높을 수 있기 때문에 우리는 귀속 방식을 창고의 데이터 구조를 사용하여 귀속을 모의할 것이다.
만능 템플릿법 역시 창고의 데이터 구조를 빌려쓰는 동시에 우리는 하나의 종류를 도입하여 추가 정보를 제공한다.
Guide 클래스를 도입했습니다.
class Guide{
public:
int ope;
TreeNode* node;
Guide(int ope,TreeNode* node):ope(ope),node(node){}
};
우리는 창고를 사용하는 과정에서 트리 노드를 저장하지 않고 가이드 클래스의 대상을 저장한다. 가이드 클래스의 대상은 트리 노드와 추가 정보(int ope)를 포함하고 실제로ope는 두 가지 수치만 있다. 0과 1이다.ope=0은 우리가 처음으로 어떤 나무 노드를 훑어보았다는 것을 의미한다(우리가 처음 훑어본 어떤 노드는 세 가지 유형의 조작이 있다)
중서가 왼쪽, 뿌리, 오른쪽에 두루 걸쳐 있다.그래도 창고에 넣는 순서는 오른쪽, 뿌리, 왼쪽입니다.대응하는 핵심 코드
st.push(Guide(0,s.node->right));
st.push(Guide(1,s.node));
st.push(Guide(0,s.node->left));
ope = 1은 이 대상에 포함된 트리 노드의 값을 최종vector에 저장하는 것을 의미합니다.
그러면 최종 완성판 코드는 다음과 같다.앞의 순서, 뒤의 순서가 반복되지 않는 것은 상술한 세 문장의 순서를 바꾸기만 하면 된다.
class Guide{
public:
int ope;
TreeNode* node;
Guide(int ope,TreeNode* node):ope(ope),node(node){}
};
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
if(root == NULL)
return res;
stack<Guide> st;
st.push(Guide(0,root));
while(!st.empty())
{
Guide s = st.top();
st.pop();
if(s.node == NULL)
continue;
if(s.ope == 1)
{
res.push_back(s.node->val);
}else{
st.push(Guide(0,s.node->right));
st.push(Guide(1,s.node));
st.push(Guide(0,s.node->left));
}
}
return res;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무의 깊이가 두루 다니다텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.