QUESTION

easy

明明二叉树的后序遍历是困难!这个为什么是easy嘛!

题目描述

给定一个 N 叉树,返回其节点值的后序遍历

例如,给定一个 3 叉树:

【Leetcode】590. N叉树的后序遍历
返回其后序遍历: [5,6,3,2,4,1]

说明

递归法很简单,你可以使用迭代法完成此题吗?


SOLUTION

  • 后序遍历可以理解为,从左到右再到根
  • 前面题目描述也提到了,递归很简单,进阶用迭代法

方法一(递归)

vector<int> postorder(Node* root) {
    vector<int> res;
    helper(root, res);
    return res;
}
void helper(Node* node, vector<int>& res){
    if(!node) return;
    for(auto child : node->children){
        helper(child, res);
    }
    res.push_back(node->val);
}

方法二(迭代, 双栈)

  • 代码可能不够简洁
  • 双栈实现的,一个栈记录过程,一个栈输出结果
  • 我在测试这个方法的时候比递归耗时还长,有待考量吧
vector<int> postorder(Node* root) {
    vector<int> res;
    if(!root) return res;
    stack<Node*> sin;
    stack<Node*> sout;
    sin.push(root);
    sout.push(root);
    Node* p = NULL;
    Node* q = NULL;
    while(!sout.empty()){
        p = sout.top();
        if(!sin.empty()) q = sin.top();
        else q = NULL;
        if(p == q){
            if(!q->children.empty()){
                sin.pop();
                for(int i = p->children.size() - 1; i >= 0; i--){ //逆序进栈
                    sin.push(p->children[i]);
                    sout.push(p->children[i]);
                }
            }
            else{
                res.push_back(p->val);
                sin.pop();
                sout.pop();
            }
        }
        else{
            res.push_back(p->val);
            sout.pop();
        }
    }
    return res;
}

方法三(迭代, 单栈)

这个办法和之前的方法有本质的不同,顺序入栈,只用一个栈就完成了,是简洁又好的办法,结果反序恰好就是正确答案

vector<int> postorder(Node* root) {
    vector<int> res;
    if(!root) return res;
    stack<Node*> s;
    s.push(root);
    while(!s.empty()){
        Node* p = s.top();
        s.pop();
        res.push_back(p->val);
        for (auto child : p->children){
            s.push(child);
        }
    }
    reverse(res.begin(), res.end());
    return res;
}

相关文章:

  • 2021-07-13
  • 2021-06-17
  • 2021-09-11
  • 2021-04-22
  • 2021-04-24
  • 2021-11-07
  • 2021-07-08
猜你喜欢
  • 2021-09-28
  • 2021-04-19
  • 2021-11-26
  • 2021-05-06
  • 2021-12-26
  • 2021-10-19
相关资源
相似解决方案