二叉树的各种遍历算法

这篇文章是想写二叉树的先序遍历,中序遍历和后序遍历的各种递归和非递归算法。

1,首先给出二叉树的一个样例

 
2 各种遍历算法的概念
* 先序遍历 : 从根节点开始,先遍历跟节点,然后先序遍历其左子树,最后先序遍历其右子树
* 中序遍历 : 先左然后是根节点最后是右子树
* 后序遍历 : 先左后右最后才是根节点
3 各种遍历算法对样例的结果:
* 先序遍历 : ABDHTECFG
* 中序遍历 : HDTBEAFCG
* 后序遍历 : HTDEBFGCA
4 递归算法
* 先序遍历 :
       
其他算法依次类推,左节点,右节点,根节点递归的顺序不同~
5 非递归算法
5.1非递归算法需要的数据结构:
* 用来存放节点指针以及左右子节点是否访问的标识的结构体
* 用来存放上面提到的结构体的栈
5.2 具体的算法过程
先需要说明的两个规则(依据算法的不同而不同,此处以先序遍历为例)
* 什么时候打印节点?一旦访问就打印
* 在栈中的节点什么时候退出栈?当左右子节点的标识都有的时候退出栈
* 先序遍历
1 访问根节点同时入栈  
2 看栈中当前节点
   *左节点有没有访问,如果没有则访问其左节点并入栈,同时把当前节点打上左节点访问的标识 重复第2步
   *看右节点是否访问,如果没有则访问其右节点并入栈,同时把当前节点打上右节点访问的标识 退出栈 重复第2步直到栈为空
   样例的非递归算法访问图如下:
   输出A                          输出AB                       输出ABD            

 

 

 

 

 

 

 

 

 

 

A

 

        

 

 

 

 

 

 

 

 B

 

 Y

A

 

输出ABDH    

 

 

 

 

 D

 

 Y

 

 Y

A

 

              因为H左右为空所以退出

 

 H

 

 Y

 D

 

 Y

 B

 

 Y

A

 

 

 Y

 H

 Y

 D

 Y

 B

 

 Y

A

 

 
 
  输出 ABDHT          输出ABDHTE           输出ABDHTEC      输出ABDHTCF                               输出ABDHTCFG   

 

 

 

 Y

 T

 Y

 Y

 B

 Y

 Y

A

 

 

 

 

 

 

 

 Y

 E

 Y

A

 Y

                                                                                       
 

 

 

 

 

 

 

 

 

 

 

C

 

 

 

 

 

 

 

 Y

 F

 Y

C

 Y

   

 

 

 

 

 

 

 

 

 

 Y

G

 Y

 
其他算法过程是一样的,只是打印和退出栈的规则不一样而已。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值