您的当前位置:首页正文

二叉树后序遍历非递归

来源:华佗小知识

这是LeetCode上的题,解答也是官配,只是复习数据结构的时候想想自己有不少东西都没有整理过,过后想找也不方便。本来这种情况下,最好的方法是开一个博客,但是看到简书的界面比较好看,就先放到这里。等统计力学2考完了之后自己搭一个博客系统,语法高亮什么的也搞起来,到时候再开个帖子。

BTW, 这是第一次用Markdown写东西,很多东西还真是不习惯,另外发现简书对于代码块的支持好像还是有点问题的,两个`之间插入不了大段代码,还是得用空四格的方法,而且也没有语法高亮。

#include <iostream>
#include <stack>
using namespace std;

class Solution {
public:
    vector<int> postorderTraversal(TreeNode *root) {
        TreeNode *mark = NULL;
        stack<TreeNode *> S;
        vector<int> result;
        do {
            while(root) {
                S.push(root);
                root = root->left;
            }
            mark = NULL;
            while(!S.empty()) {
                root = S.top();
                S.pop();
                /* 右儿子不存在或已经被访问过 */
                if(root->right == mark) {
                    result.push_back(root->val);
                    mark = root;//后序遍历时,当节点的右儿子存在时,其前驱为右儿子
                } else {
                    S.push(root);
                    root = root->right;
                    break;
                }
            }
        } while(!S.empty());
        return result;
    }
};