二叉树的递归和非递归遍历(前序、中序、后序)
2017-02-16 10:43
302 查看
1.前序遍历
2.中序遍历
3.后序遍历
//前序遍历递归形式 void PreOderTraversal(Node<T> *root) { if(root) { cout<<root->data<<" "; PreOderTraversal(root->lTreeNode); PreOderTraversal(root->rTreeNode); } } //前序遍历的非递归形式 void PreOderTraversal1(Node<T> *root) { stack<Node<T>*> tree; Node<T> *p = root; while(p!=NULL || !tree.empty()) { while(p!=NULL) { cout<<p->data<<" "; tree.push(p); p = p->lTreeNode; } p = tree.top(); tree.pop(); p = p->rTreeNode; } }
2.中序遍历
//中序遍历递归形式 void InOderTraversal(Node<T> *root) { if(root) { InOderTraversal(root->lTreeNode); cout<<root->data<<" "; InOderTraversal(root->rTreeNode); } } //中序遍历的非递归形式 void InOderTraversal1(Node<T> *root) { stack<Node<T>*> tree; Node<T> *p = root; while(p!=NULL || !tree.empty()) { while(p!=NULL) { tree.push(p); p = p->lTreeNode; } p = tree.top(); tree.pop(); cout<<p->data<<" "; p = p->rTreeNode; } }
3.后序遍历
//后序遍历递归形式 void PostOderTraversal(Node<T> *root) { if(root) { PostOderTraversal(root->lTreeNode); PostOderTraversal(root->rTreeNode); cout<<root->data<<" "; } } //后序遍历的非递归形式 void PostOderTraversal1(Node<T> *root) { stack<Node<T>*> tree; Node<T> *p = root; Node<T> *r = NULL; while(p!=NULL || !tree.empty()) { while(p!=NULL)//一直向左遍历到底 { tree.push(p); p = p->lTreeNode; } p=tree.top(); //取栈顶值 if(p->rTreeNode && p->rTreeNode!=r)//如果有未访问过的右子树,将其设置为p { p = p->rTreeNode; } else//如果没有右子树或者右子树已经访问过了,则输出,并将p置为NULL。 { tree.pop(); cout<<p->data<<" "; r = p; p = NULL; } } }
相关文章推荐
- 【二叉树】 前序、中序和后序的递归遍历与非递归遍历
- 实现二叉树的前序/中序/后序递归、非递归遍历
- 二叉树的递归与非递归遍历(前序、中序、后序)
- [置顶] 数据结构——二叉树 前序、中序、后序、递归遍历和非递归遍历
- c/c++实现二叉树前序,中序和后序的递归和非递归遍历
- 【经典面试题二】二叉树的递归与非递归遍历(前序、中序、后序)
- 二叉树的先序、中序、后序、层序递归及非递归遍历
- 二叉树的先序、中序、后序、层序递归及非递归遍历
- 二叉树的先序、中序、后序递归遍历和非递归遍历
- 【经典面试题二】二叉树的递归与非递归遍历(前序、中序、后序)
- 二叉树基本操作的递归实现(二叉树建立,先序,中序,后序,深度的递归遍历。广度优先,高度优先的非递归遍历)
- 二叉树的递归与非递归遍历(前序、中序、后序)
- 二叉树的递归与非递归遍历(前序、中序、后序)
- C++实现二叉树的递归遍历与非递归遍历(先序、中序、后序、层序)
- 数据结构——二叉树的递归与非递归遍历(先序,中序,后序)
- 【面试题】二叉树的递归与非递归遍历(前序、中序、后序)
- ZT 二叉树先序,中序,后序遍历非递归实现
- 二叉树先序、中序、后序遍历的非递归实现
- 二叉树前序、中序和后序的非递归遍历
- 递归与非递归遍历二叉树(前序、中序、后序)