非递归实现二叉树的遍历
来源:互联网 发布:linux设置脚本开机启动 编辑:程序博客网 时间:2024/05/10 18:51
刚从小米校园实习生招聘回来,有一道要求用非递归实现二叉树的先序遍历,回来把这先序、中序、后序都好好弄弄吧……
非递归的话要存储节点的父节点,但是二叉树中的各节点又没有指向父节点的指针,所以……用栈吧。。。
void PreOrder(BiTree T)
{
//先序遍历二叉树T的非递归算法
while(!(T==NULL&&top==NULL))
{
if(T)
{
printf("%d ",T->data);
push(T);
T=T->lchild;
}
else
{
T=(BiTree)pop();
T=T->rchild;
}
}
}
void InOrder(BiTree T)
{
//中序遍历二叉树T的非递归算法
while(!(T==NULL&&top==NULL))
{
while(T)
{
push(T);
T=T->lchild;
}
T=(BiTree)pop();
printf("%d ",T->data);
T=T->rchild;
}
}
void PostOrder(BiTree T)
{
//后序遍历二叉树T的递归算法
unsigned sign;//记录结点从栈中弹出的次数
while(!(T==NULL&&top==NULL))
{
if(T)
{
push(T);//第一次遇到结点T时压入其指针
push(1);//置标志为1
T=T->lchild;
}
else
{
while(top)
{
sign=pop();
T=(BiTree)pop();
if(1==sign)//表示走过T的左子树
{
push(T);
push(2);
T=T->rchild;
break;
}
else
{
if(2==sign)//表示T的左右子树都已走过
{
printf("%d ",T->data);
T=NULL;
}
}
}
}
}
}
- 非递归实现二叉树的遍历
- 非递归实现二叉树的遍历
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树的非递归遍历实现
- 二叉树遍历的非递归实现
- 非递归实现二叉树的遍历
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 非递归遍历二叉树的实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树的遍历(递归实现+非递归实现)
- 二叉树的各种遍历的递归非递归实现。
- 递归、非递归实现二叉树的前中后序遍历
- Java实现二叉树的递归与非递归遍历
- 二叉树的遍历:递归和非递归实现
- 邮件列表的文化与礼节 (转)
- 机器学习的数据集语源代码
- C语言random问题
- 云计算、社交网络和移动互联网------转自月光博客
- Java中抽象类与接口的区别
- 非递归实现二叉树的遍历
- C语言解惑:什么是数组名
- O(lg m + lgn)时间复杂度求两个有序序列合并后第K大的数
- 12 个有效的提高编程技能的方法
- java连接Mysql数据库
- MySQL 中文乱码问题
- MySQL 严重 Bug - 用户登陆漏洞
- 查看Ubuntu 版本号
- 【转载】UML类图与类的关系详解 zt