python 二叉树遍历非递归_二叉树先序遍历的非递归算法(用栈实现)

本文介绍了如何使用栈实现Python中二叉树的先序非递归遍历算法。通过示例代码详细解释了遍历过程,帮助读者理解非递归遍历的工作原理。
摘要由CSDN通过智能技术生成

百度一下就可以知道答案了。直接搜”二叉树的前序遍历和后序遍历的算法“

第一条就是:

http://blog.csdn.net/sky04/article/details/4510266

我只解释一下先序遍历非递归算法,其他的自学一下吧。:

//先序遍历非递归算法 void PreOrderUnrec(Bitree *t)

{

Stack s;

StackInit(s);    //初始化

Bitree *p=t;     // 二叉树根节点

while (p!=NULL || !StackEmpty(s))

{

while (p!=NULL)             //遍历左子树

{

visite(p->data);

push(s,p);

p=p->lchild;      //lchild 左子树

}

if (!StackEmpty(s))         //通过下一次循环中的内嵌while实现右子树遍历

{

p=pop(s);

p=p->rchild;     //rchild 右子树

}//endif

}//endwhile

}

/*  Stack s ;创建堆栈。这也是堆栈的一个应用。既然你已经学到了二叉树,就应该知道堆栈,可以把以前编写的堆栈程序拿来用。

POP,PUSH 堆栈的弹出,压栈。

按照该程序步骤,来演示 s 和指针 p 的内容:(完全二叉树为例)

前序遍历次序为:ABCDEFG

1.第一次执行 while语句后

栈 s[底部,ABC]   p=NULL  访问了 :ABC节点

2.第一次执行 if

栈 s[底部,AB]   p=NULL  访问了 :ABC节点 由于c的右子树为空,所以p=NULL

3.第二次跳过了 while

4.第二次执行 if

栈 s[底部,A]   p指向了D  访问了:ABC节点

5.第三次执行 while语句后

栈 s[底部,AD]   p=NULL   访问了:ABCD节点,本次while循环,只访问了D

剩下步骤的自己来吧!

实际上,递归也是在操作堆栈。

一般的书上应该有这么类似的话:

“利用一个辅助堆栈,可以将递归算法转化为等价的分递归算法”

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值