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