struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
1、前序
vector<int> preorderTraversal(TreeNode* root) {
stack<TreeNode*> stk;
vector<int> res;
while(root||!stk.empty()){
while(root){
stk.push(root);
res.push_back(root->val);
root=root->left;
}
if(!stk.empty()){
root=stk.top();
stk.pop();
root=root->right;
}
}
return res;
}
2、中序
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> stk;
vector<int> res;
if(!root) return res;
TreeNode* p=root;
while(p||!stk.empty()){
while(p){
stk.push(p);
p=p->left;
}
p=stk.top();
stk.pop();
res.push_back(p->val);
p=p->right;
}
return res;
}
3、后序
vector<int> postorderTraversal(TreeNode* root) {
stack<TreeNode*> stk;
vector<int> res;
TreeNode* lastVisit=NULL,*p=root;
while(p!=NULL||!stk.empty()){
while(p!=NULL){
stk.push(p);
p=p->left;
}
p=stk.top();
stk.pop();
if(p->right==NULL || lastVisit==p->right){
res.push_back(p->val);
lastVisit=p;
p=NULL;
}else{
stk.push(p);
p=p->right;
}
}
return res;
}
4、层序
vector<vector<int>> levelOrder(TreeNode* root) {
vector<int> level;
vector<vector<int> > res;
queue<TreeNode*> que;
if(root!=NULL) que.push(root);
while(!que.empty()){
int cnt=que.size();
while(cnt--){
TreeNode* tmp=que.front();
que.pop();
level.push_back(tmp->val);
if(tmp->left!=NULL) que.push(tmp->left);
if(tmp->right!=NULL) que.push(tmp->right);
}
res.push_back(level);
level.clear();
}
return res;
}