144、145、94  前中后序遍历,及其非递归写法

博客围绕144、145、94相关的前中后序遍历展开,着重介绍了其非递归写法,属于信息技术领域中数据结构与算法相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

144  二叉树的前序遍历                                                                                                       点击此处返回总目录

145  二叉树的后序遍历

94    二叉树的中序遍历

 

144 二叉树的前序遍历

【题目】

 

 

 

【方法一:递归】

写法一:搞一个全局的list。

 

 

结果:1ms

 

写法二:直接加。

结果:2ms

 

写法三:把List当做参数传递。

结果:

 

写法一和写法三各有优劣,差不多。写法二最差。

 

【方法二:非递归】

写法一:

 

结果:

 

写法二:

如果写法一,不写第35句,则在添加节点的时候首先要判断是否为空。也就是需要增加下面代码的1,修改2和3。

 

 

 

写法一和二差不多。写法一简洁一点,但是会把空节点加到栈里面,先进栈,出来再判断。写法二,繁琐一点,先判断在进栈。会快一点。
 

 

 

145  二叉树的后序遍历

【题目】

 

【方法一:递归】

 

结果:

 

 

【方法二:非递归】

后序遍历是左右中。当有堆栈来存储节点,要分清是从左子树返回来的还是从右子树返回来的。如果是从右子树返回来的,才访问改节点。如果是从左子树(右子树还没有访问的情况)返回来的,则访问右子树。

 

记住这个代码就行了。比较经典的写法。可以自己动手模拟一下。

 

代码:

 

结果:

 

 

 

【方法三:非递归:通过前序遍历来实现】

因为前序遍历的顺序是:中左右。根据前序遍历的代码,略加修改就可以写出"中右左"的代码。再反过来就是"左右中",即后序遍历了。

 

 

代码:

 

结果:

 

这种方法会慢一点,因为最后还要反转。

 

 

 

94    二叉树的中序遍历

【题目】

 

【方法一:递归】

 

代码:

 

结果:

 

 

【方法二:非递归】 

首先去它的最左边。

然后出来的时候,访问完。再去它的右边。

 

 

代码:

 

结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值