1.前序遍历
每个节点被访问了两次
void preorderTraversal_Recursion(TreeNode *root){
if(!root)
return;
stack<TreeNode*> s;
while(!s.empty() || root){
while(root){
cout<<root->val;
s.push(root);
root=root->left;//一直向左遍历,直到遇到叶节点
}
if(!s.empty()){
root=s.top();
s.pop();
root=root->right;//开始遍历某个右节点
}
}
}
http://blog.csdn.net/beitiandijun/article/details/41926903
2.中序 遍历
void inorderTraversal_Recursion(TreeNode *root){
if(!root)
return;
stack<TreeNode*> s;
while(root || !s.empty()){
while(root){
s.push(root);
root=root->left;
}
if(!s.empty()){
root=s.top();
s.pop();
cout<<root->val;
root=root->right;
}
}
}
http://blog.csdn.net/beitiandijun/article/details/41927203