求二叉树的深度(或高度)的非递归算法

来源:互联网 发布:材料仿真软件 编辑:程序博客网 时间:2024/05/17 23:20

题目:输入一棵二元树的根结点,求该树的深度。

 

网上所给算法大多是递归求解,而我们都知道递归的代价是很大的。所以最好是用非递归的算法来求解。

求二叉树的深度可以联想到二叉树的层序遍历,可是层序遍历如何记录树的深度?

层序遍历需要使用一个队列来保存树的节点。初始化讲根节点入队。接着只要队列不为空,则出队,并将出队元素的子节点入队。

当需要记录树的深度时,可以使用两个队列,第一个队列保存当前访问的那一层的节点,讲当前这一层的节点的子节点压入下一队列,这样需要两个队列的额外空间。

若只使用一个队列,则需要一个特殊的标记mark。当我们把某一层的节点入队之后,再压入一个标记mark。当我们在出对是遇到一个标记mark时,我们就知道已经访问完了一层,则当前队列中的元素全部是下一层的节点,我们再压入一个标记mark。用标记mark来标记层数,可以减少一个队列的使用,但是前提是保存队列的数据结构能找到特殊的mark元素。

 

 

参考资料:

http://zhedahht.blog.163.com/blog/static/25411174200732975328975/

原创粉丝点击