二叉树的各种非递归遍历
来源:互联网 发布:速算计算器软件 编辑:程序博客网 时间:2024/05/17 00:12
1.前序非递归:
二叉树的非递归前序遍历,前序遍历思想:先让根进栈,只要栈不为空,就可以做弹出操作, 每次弹出一个结点,记得把它的左右结点都进栈,记得右子树先进栈,这样可以保证右子树在栈中总处于左子树的下面。 */ void PreOrder_Nonrecursive(BiTree T) //先序遍历的非递归 { if(!T) return ; stack<BiTree> s; s.push(T); while(!s.empty()) { BiTree temp = s.top(); cout<<temp->data<<" "; s.pop(); if(temp->rchild) s.push(temp->rchild); if(temp->lchild) s.push(temp->lchild); } }
- void InOrderTraverse(BiTree T) // 中序遍历的非递归
- {
- if(!T)
- return ;
- stack<BiTree> s;
- BiTree curr = T->lchild; // 指向当前要检查的节点
- s.push(T);
- while(curr != NULL || !s.empty())
- {
- while(curr != NULL) // 一直向左走
- {
- s.push(curr);
- curr = curr->lchild;
- }
- curr = s.top();
- s.pop();
- cout<<curr->data<<" ";
- curr = curr->rchild;
- }
- }
- void PostOrder_Nonrecursive(BiTree T) // 后序遍历的非递归 双栈法
- {
- stack<BiTree> s1 , s2;
- BiTree curr ; // 指向当前要检查的节点
- s1.push(T);
- while(!s1.empty()) // 栈空时结束
- {
- curr = s1.top();
- s1.pop();
- s2.push(curr);
- if(curr->lchild)
- s1.push(curr->lchild);
- if(curr->rchild)
- s1.push(curr->rchild);
- }
- while(!s2.empty())
- {
- printf("%c ", s2.top()->data);
- s2.pop();
- }
- }
4. 层序遍历
- int visit(BiTree T)
- {
- if(T)
- {
- printf("%c ",T->data);
- return 1;
- }
- else
- return 0;
- }
- void LeverTraverse(BiTree T) //方法一、非递归层次遍历二叉树
- {
- queue <BiTree> Q;
- BiTree p;
- p = T;
- if(visit(p)==1)
- Q.push(p);
- while(!Q.empty())
- {
- p = Q.front();
- Q.pop();
- if(visit(p->lchild) == 1)
- Q.push(p->lchild);
- if(visit(p->rchild) == 1)
- Q.push(p->rchild);
- }
- }
0 0
- 二叉树的各种非递归遍历
- 二叉树的各种遍历的递归非递归实现。
- 二叉树各种递归非递归遍历
- 二叉树的各种遍历(递归,非递归,层次)
- 二叉树的各种遍历(递归、非递归)
- 二叉树的各种递归和非递归遍历
- 遍历二叉树的各种操作(非递归遍历)
- 遍历二叉树的各种操作(非递归遍历)
- 遍历二叉树的各种操作(非递归遍历)
- 遍历二叉树的各种操作(非递归遍历)
- 遍历二叉树的各种操作(非递归遍历)
- 遍历二叉树的各种操作(非递归遍历)
- 遍历二叉树的各种操作(非递归遍历)
- 遍历二叉树的各种操作(非递归遍历)
- 遍历二叉树的各种操作(非递归遍历)
- 遍历二叉树的各种操作(非递归遍历)
- 遍历二叉树的各种操作(非递归遍历)
- 遍历二叉树的各种操作(非递归遍历)
- delphi2007中如何安装ActiveX控件
- Netty系列之Netty可靠性分析
- 笑死大学么?.2N脑上谥
- IOS_改变UITextField placeHolder颜色、字体
- 3.17 MonoForAndroid用户人机界面--关于(About)程序信息 Menu功能菜单程序设计
- 二叉树的各种非递归遍历
- PostgreSQL执行计划的解释
- Java调用Matlab
- 设置Ubuntu允许远程连接MySQL
- mysql安装报错一例
- windows下通过命令行工具编译和打包Android项目
- 从url获取文件名及大小
- 脸萌火爆背后的产品思考
- Linux时间函数