递归与非递归求二叉树深度

本文详细介绍了如何通过递归和非递归方式计算二叉树的深度,从题目分析到具体代码实现,全面解析这两种方法的思路与步骤。
摘要由CSDN通过智能技术生成

题目


分别用递归与非递归算法求二叉树深度。

分析


方法一:
递归方法大家都很熟悉,如何用非递归求解呢?
我们知道二叉树有层序遍历,利用层序遍历的过程,记录当前层数,那么遍历结束后也就求得二叉树的层数,即深度。

方法二:
层序遍历需要使用一个队列来保存树的节点。初始化讲根节点入队。接着只要队列不为空,则出队,并将出队元素的子节点入队。
当需要记录树的深度时,可以使用两个队列,第一个队列保存当前访问的那一层的节点,讲当前这一层的节点的子节点压入下一队列,这样需要两个队列的额外空间。
若只使用一个队列,则需要一个特殊的标记mark。当我们把某一层的节点入队之后,再压入一个标记mark。当我们在出对是遇到一个标记mark时,我们就知道已经访问完了一层,则当前队列中的元素全部是下一层的节点,我们再压入一个标记mark。用标记mark来标记层数,可以减少一个队列的使用,但是前提是保存队列的数据结构能找到特殊的mark元素。

方法三:利用后序遍历的思想
受后续遍历二叉树思想的启发,想到可以利用后续遍历的方法来求二叉树的深度,在每一次输出的地方替换成算栈S的大小,遍历结束后最大的栈S长度即是栈的深度。
算法的执行步骤如下: <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值