[leetcode 뒷차례 훑어보기] Binary Tree Postorder Traversal
1. 제목
Given a binary tree, return the postorder traversal of its nodes' values.
For example: Given binary tree {1,#,2,3}
, 1
\
2
/
3
return [3,2,1]
.
Note: Recursive solution is trivial, could you do it iteratively?
2. 분석
두 갈래 나무의 뒷부분을 두루 훑어보는 것은'좌우근'의 순서에 따라 노드를 두루 훑어보는 것이다. 이전 문장 [leetcode 먼저 훑어보는 것]과 마찬가지로 귀속법과 교체법이 있다.
귀속법은 간결하지만 효율은 낮다.
'후차적 반복'교체법의 프로그램은'선차적 반복'코드를 복용할 수 있다. 왜냐하면'선차적 반복'은 우리가'뿌리 좌우'의 교체판 코드를 실현하고 이를'뿌리 오른쪽 왼쪽'으로 바꾸어 얻은 결과의 재역순이 바로 후차적 반복'좌우 뿌리'의 결과이기 때문이다.
(선차적 반복법의 상세한 분석은 이전 문장 참조[leetcode 선차적 반복])
3. 코드
# 귀속법
<span style="font-size:18px;">/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
/* */
vector<int> postorderTraversal(TreeNode *root) {
vector<int> result,left_vec,right_vec;
if(!root) return result;
left_vec=postorderTraversal(root->left);
right_vec=postorderTraversal(root->right);
for(vector<int>::iterator iter=left_vec.begin();iter!=left_vec.end();iter++)
result.push_back(*iter);
for(vector<int>::iterator iter1=right_vec.begin();iter1!=right_vec.end();iter1++)
result.push_back(*iter1);
result.push_back(root->val);
return result;
}
};</span>
# 교체법
<span style="font-size:18px;">class Solution {
public:
/*
“ ”, “ ” , “ ”
“ ” , left、right ;
*/
vector<int> postorderTraversal(TreeNode *root) {
/* “ ” */
vector<int> result;
if(!root) return result;
stack<TreeNode *> stk;
stk.push(root);
TreeNode *p=root;
while(!stk.empty())
{
p=stk.top();
stk.pop();
result.push_back(p->val);
if(p->left) stk.push(p->left);
if(p->right) stk.push(p->right);
}
/* “ ”->“ ”*/
for(auto i=result.begin(),j=result.end()-1;i<j;i++,j--)
swap(*i,*j);
return result;
}
};</span>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.
1
\
2
/
3
두 갈래 나무의 뒷부분을 두루 훑어보는 것은'좌우근'의 순서에 따라 노드를 두루 훑어보는 것이다. 이전 문장 [leetcode 먼저 훑어보는 것]과 마찬가지로 귀속법과 교체법이 있다.
귀속법은 간결하지만 효율은 낮다.
'후차적 반복'교체법의 프로그램은'선차적 반복'코드를 복용할 수 있다. 왜냐하면'선차적 반복'은 우리가'뿌리 좌우'의 교체판 코드를 실현하고 이를'뿌리 오른쪽 왼쪽'으로 바꾸어 얻은 결과의 재역순이 바로 후차적 반복'좌우 뿌리'의 결과이기 때문이다.
(선차적 반복법의 상세한 분석은 이전 문장 참조[leetcode 선차적 반복])
3. 코드
# 귀속법
<span style="font-size:18px;">/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
/* */
vector<int> postorderTraversal(TreeNode *root) {
vector<int> result,left_vec,right_vec;
if(!root) return result;
left_vec=postorderTraversal(root->left);
right_vec=postorderTraversal(root->right);
for(vector<int>::iterator iter=left_vec.begin();iter!=left_vec.end();iter++)
result.push_back(*iter);
for(vector<int>::iterator iter1=right_vec.begin();iter1!=right_vec.end();iter1++)
result.push_back(*iter1);
result.push_back(root->val);
return result;
}
};</span>
# 교체법
<span style="font-size:18px;">class Solution {
public:
/*
“ ”, “ ” , “ ”
“ ” , left、right ;
*/
vector<int> postorderTraversal(TreeNode *root) {
/* “ ” */
vector<int> result;
if(!root) return result;
stack<TreeNode *> stk;
stk.push(root);
TreeNode *p=root;
while(!stk.empty())
{
p=stk.top();
stk.pop();
result.push_back(p->val);
if(p->left) stk.push(p->left);
if(p->right) stk.push(p->right);
}
/* “ ”->“ ”*/
for(auto i=result.begin(),j=result.end()-1;i<j;i++,j--)
swap(*i,*j);
return result;
}
};</span>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.
<span style="font-size:18px;">/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
/* */
vector<int> postorderTraversal(TreeNode *root) {
vector<int> result,left_vec,right_vec;
if(!root) return result;
left_vec=postorderTraversal(root->left);
right_vec=postorderTraversal(root->right);
for(vector<int>::iterator iter=left_vec.begin();iter!=left_vec.end();iter++)
result.push_back(*iter);
for(vector<int>::iterator iter1=right_vec.begin();iter1!=right_vec.end();iter1++)
result.push_back(*iter1);
result.push_back(root->val);
return result;
}
};</span>
<span style="font-size:18px;">class Solution {
public:
/*
“ ”, “ ” , “ ”
“ ” , left、right ;
*/
vector<int> postorderTraversal(TreeNode *root) {
/* “ ” */
vector<int> result;
if(!root) return result;
stack<TreeNode *> stk;
stk.push(root);
TreeNode *p=root;
while(!stk.empty())
{
p=stk.top();
stk.pop();
result.push_back(p->val);
if(p->left) stk.push(p->left);
if(p->right) stk.push(p->right);
}
/* “ ”->“ ”*/
for(auto i=result.begin(),j=result.end()-1;i<j;i++,j--)
swap(*i,*j);
return result;
}
};</span>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.