590. N 叉树的后序遍历 - 力扣(LeetCode) (leetcode-cn.com)
?
递归:
class Solution {
vector<int>res;
public:
vector<int> postorder(Node* root) {
if(root==nullptr) return res;
fun(root);
res.push_back(root->val);
return res;
}
void fun(Node*root){
if(root==nullptr) return;
for(int i=0;i<root->children.size();i++){
fun(root->children[i]);
res.push_back(root->children[i]->val);
}
}
};
非递归:
思想:仔细观察结果,发现是从右往左遍历后倒序输出,这样用两个栈,一个用来从左到右装节点,另一个用来从倒序输出。
class Solution {
vector<int>res;
public:
vector<int> postorder(Node* root) {
if(root==nullptr) return res;
fun(root);
return res;
}
void fun(Node*root){
if(root==nullptr) return;
stack<Node*>s;
stack<int>temp;
s.push(root);
while(s.size()!=0){
root=s.top();
temp.push(root->val);
s.pop();
for(int i=0;i<root->children.size();i++){
s.push(root->children[i]);
}
}
while(temp.size()!=0){
res.push_back(temp.top());
temp.pop();
}
}
};
|