美文网首页
二叉树后序遍历非递归

二叉树后序遍历非递归

作者: 方逸飞 | 来源:发表于2015-01-02 22:01 被阅读85次

    这是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;
        }
    };
    

    相关文章

      网友评论

          本文标题:二叉树后序遍历非递归

          本文链接:https://www.haomeiwen.com/subject/rtbztttx.html