二叉树 前中后序遍历非递归版本 C++实现
2014-11-13 20:52
525 查看
RT。
/////
//前序排列的非递归实现: Template<class T> Void PreOrder(BinaryTreeNode<T> *t) { stack <BinaryTreeNode<T> *> S(Maxlength); BinaryTreeNode<T> *p=t; do{ while(p){ visit(p);//访问P S.Add(p); p=p->LeftChild; } If(!S.IsEmpty()){ S.Delete(p); p=p->RightChild; } }while(p||!S.IsEmpty()) } //中序排列的非递归实现: template<class T> void InOrder(BinaryTreeNode<T> *t) //对*t进行中序遍历 { stack <BinaryTreeNode<T> *> S(MaxLength); BinaryTreeNode<T> *p=t ; do { while (p) {S.Add(p); p=p->LeftChild;} if (!S.IsEmpty()) {S.Delete(p); Visit(p); p=p->RightChild; } } while (p||!S.IsEmpty()) } //后序排列的非递归实现: template<class T> void BinaryTree<T>::PostOrder1(BinaryTreeNode<T> *t) { int mark; stack<int> markStack; //标志位 stack <BinaryTreeNode<T> *> S; BinaryTreeNode<T> *p=t ; do { while (p) { S.push(p); markStack.push(1); p=p->LeftChild; } if (!S.empty()) { p=S.top(); mark=markStack.top(); if(p->RightChild&&mark==1){ markStack.pop(); markStack.push(2); //右子树 p=p->RightChild; } else{ S.pop(); markStack.pop(); Visit(p); p=0; } } } while (p||!S.empty()) ; }
/////
相关文章推荐
- 递归、非递归实现二叉树的前中后序遍历
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- C++实现二叉树的递归遍历与非递归遍历(先序、中序、后序、层序)
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 探讨:C++实现链式二叉树(用非递归方式先序,中序,后序遍历二叉树)
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 【数据结构】二叉树的前中后序遍历递归和非递归实现
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- C++实现二叉树 前序遍历, 后序遍历, 中序遍历, 层序遍历(不用递归)
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- c++实现二叉树的非递归创建以及非递归先序、中序、后序遍历
- leetcode笔试题二叉树的前序、中序、后序遍历的递归和循环c++实现
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 二叉树的遍历 前序 中序 后序 分别实现递归和非递归遍历方式
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现