//
// main.cpp
// binary tree preorder treversal
//
// Created by zhukunjie on 14-8-15.
// Copyright (c) 2014年 zhukunjie. All rights reserved.
//
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
struct TreeNode {
int val;
TreeNode * left;
TreeNode * right;
TreeNode(int x): val(x),left(nullptr),right(nullptr){}
};
//前序
vector<int> preorderTraversal(TreeNode* root)
{
vector<int>res;
stack<TreeNode*> tmp;
if(root==NULL) return res;
TreeNode *p=root;
if(p) tmp.push(p);
while (!tmp.empty()) {
p=tmp.top();
tmp.pop();
res.push_back(p->val);
if(p->right!=nullptr) tmp.push(p->right);
if(p->left!=nullptr) tmp.push(p->left);
}
return res;
}
//中序
vector<int> inorderTraversal(TreeNode *root) {
vector<int>res;
stack<TreeNode*> tmp;
if(root==NULL) return res;
TreeNode *p=root;
while (!tmp.empty()||p!=nullptr) {
if (p) {
tmp.push(p);
p=p->left;
}
else{
p=tmp.top();
tmp.pop();
res.push_back(p->val);
p=p->right;
}
}
return res;
}
//后序
vector<int> postorderTraversal(TreeNode *root) {
stack<TreeNode*> tmp;
vector<int> result;
TreeNode * Hasvisited;
if(root == NULL) return result;
while(root || !tmp.empty()){
while(root){
tmp.push(root);
root = root->left;
}
root = tmp.top();
if(root->right == NULL || Hasvisited == root->right){
result.push_back(root->val);
Hasvisited = root;
tmp.pop();
root = NULL;
}
else{
root = root->right;
}
}
return result;
}
int main(int argc, const char * argv[])
{
TreeNode * a1=new TreeNode(2);
TreeNode * a2=new TreeNode(3);
TreeNode * a3=new TreeNode(1);
a1->left=a2;
a2->left=a3;
inorderTraversal(a1);
std::cout << "Hello, World!\n";
return 0;
}