二叉树后序遍历非递归

这是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;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,087评论 25 709
  • 在五下的每一天早上,我们和平常一样,早早的就来到学校,开始三十到四十的尤克里里时间,我们随着音乐欢快的拔着琴弦,按...
    宁菁蕊阅读 1,495评论 0 0
  • 入职WY两个月以来,发现了很多游戏交互(工作)和以前的不同。工作期间,时不时地我会感受到这些不一样的地方刺激到我的...
    Vicol_略设小计阅读 11,585评论 1 27
  • 2017年8月13号,晨读内容。反直觉思考--斯坦福大学思维自修课 凭直觉做事是我们多年的决策经历,不过在未来互联...
    体重管理教练王萍阅读 2,563评论 0 0