這是LeetCode上的題义屏,解答也是官配舞箍,只是復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu)的時候想想自己有不少東西都沒有整理過舰褪,過后想找也不方便。本來這種情況下疏橄,最好的方法是開一個博客占拍,但是看到簡書的界面比較好看,就先放到這里捎迫。等統(tǒng)計力學(xué)2考完了之后自己搭一個博客系統(tǒng)晃酒,語法高亮什么的也搞起來,到時候再開個帖子窄绒。
BTW, 這是第一次用Markdown寫東西贝次,很多東西還真是不習(xí)慣,另外發(fā)現(xiàn)簡書對于代碼塊的支持好像還是有點(diǎn)問題的彰导,兩個`之間插入不了大段代碼蛔翅,還是得用空四格的方法,而且也沒有語法高亮位谋。
#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();
/* 右兒子不存在或已經(jīng)被訪問過 */
if(root->right == mark) {
result.push_back(root->val);
mark = root;//后序遍歷時山析,當(dāng)節(jié)點(diǎn)的右兒子存在時,其前驅(qū)為右兒子
} else {
S.push(root);
root = root->right;
break;
}
}
} while(!S.empty());
return result;
}
};