二叉树 前中后序遍历非递归版本 C++实现
来源:互联网 发布:改之理 源码 编辑:程序博客网 时间:2024/05/16 19:28
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()) ; }
/////
0 0
- 二叉树 前中后序遍历非递归版本 C++实现
- 【C++】二叉树遍历--递归与非递归实现
- 二叉树遍历的非递归实现 java版本
- 二叉树非递归遍历实现-java版本
- 二叉树非递归遍历(C++版本)
- 二叉树遍历的c语言非递归实现
- 二叉树的非递归遍历C实现
- 二叉树非递归遍历C语言实现
- 二叉树非递归遍历C语言实现
- 二叉树的非递归遍历C语言实现
- 【c++】c++模板类,实现二叉树非递归遍历
- 递归、非递归实现二叉树的前中后序遍历
- 二叉树的前中后序遍历-递归和非递归实现
- 二叉树的建立,前中后序遍历的递归版本和非递归版本,层序遍历
- 【C++】非递归遍历二叉树
- 二叉树非递归遍历(C++)
- C语言实现二叉树的递归遍历与非递归遍历
- C语言实现二叉树的递归遍历和非递归遍历
- window 下nginx+php curl 超时
- 非洲小孩(南阳oj1036)(贪心)
- 第十二周项目3(5)整数换成二进制
- pdo rowCount影响的行数
- sizeof进行结构体大小的判断
- 二叉树 前中后序遍历非递归版本 C++实现
- ubuntu 设置IP
- poj2352 树状数组
- C语言和Java中的文件操作对比
- Java网络编程
- Objective-C基础笔记(3)OC的内存管理
- VS2012中C#程序根据UML图自动生成代码
- 二分图匹配问题
- 使用synchronized实现同步代码块