/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
vector<int> result;
if(root == NULL)
return result;
stack<TreeNode *> stk;
stk.push(root);
while(!stk.empty())
{
TreeNode * trnd = stk.top();
result.push_back(trnd->val);
stk.pop();
if(trnd->right)
stk.push(trnd->right);
if(trnd->left)
stk.push(trnd->left);
}
return result;
}
};
=====================================================================================
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode *root) {
vector<int> result;
if(root==NULL) return result;
stack<TreeNode *> stk;
stk.push(root);
while(!stk.empty())
{
TreeNode * tmp = stk.top();
if(tmp->left==NULL && tmp->right==NULL)
{
result.push_back(tmp->val);
stk.pop();
while(!stk.empty() &&(stk.top()->right == tmp || stk.top()->left == tmp))
{
tmp = stk.top();
result.push_back(tmp->val);
stk.pop();
}
}
else
{
if(tmp->right)
stk.push(tmp->right);
if(tmp->left)
stk.push(tmp->left);
}
}
return result;
}
};
===============================================================================
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
vector<int> result;
if(root==NULL) return result;
stack<TreeNode *> stk;
TreeNode *node = root;
while(!stk.empty() ||node)
{
while(node!=NULL)
{
result.push_back(node->val);
stk.push(node);//!!!
node=node->left;
}
if(node == NULL)
{
node = stk.top();
stk.pop();
node=node->right;
}
}
}
};
http://en.wikipedia.org/wiki/Tree_traversal
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=331522