求二叉树的深度(或高度)的非递归算法
来源:互联网 发布:材料仿真软件 编辑:程序博客网 时间:2024/05/17 23:20
题目:输入一棵二元树的根结点,求该树的深度。
网上所给算法大多是递归求解,而我们都知道递归的代价是很大的。所以最好是用非递归的算法来求解。
求二叉树的深度可以联想到二叉树的层序遍历,可是层序遍历如何记录树的深度?
层序遍历需要使用一个队列来保存树的节点。初始化讲根节点入队。接着只要队列不为空,则出队,并将出队元素的子节点入队。
当需要记录树的深度时,可以使用两个队列,第一个队列保存当前访问的那一层的节点,讲当前这一层的节点的子节点压入下一队列,这样需要两个队列的额外空间。
若只使用一个队列,则需要一个特殊的标记mark。当我们把某一层的节点入队之后,再压入一个标记mark。当我们在出对是遇到一个标记mark时,我们就知道已经访问完了一层,则当前队列中的元素全部是下一层的节点,我们再压入一个标记mark。用标记mark来标记层数,可以减少一个队列的使用,但是前提是保存队列的数据结构能找到特殊的mark元素。
参考资料:
http://zhedahht.blog.163.com/blog/static/25411174200732975328975/
- 求二叉树的深度(或高度)的非递归算法
- 求二叉树的深度,递归与非递归算法
- 求二叉树深度的递归和非递归算法
- 求二叉树的高度(非递归)
- 求二叉树深度的非递归算法
- 非递归求二叉树的深度
- C++ 实现求二叉树的深度及遍历(递归与非递归算法)
- 层次遍历求二叉树的高度(非递归)
- 求树高度的非递归算法
- 判断完全二叉树以及求二叉树深度的递归与非递归算法实现
- 二叉树的操作3非递归算法求二叉树的高度
- 求二叉树的深度递归与非递归版
- 二叉树的遍历,递归和非递归,求深度
- 求二叉树的深度 递归 非递归
- 每周数据结构【3】:设计一个非递归的算法求二叉树高度
- 二叉树的非递归遍历&求深度
- 二叉树递归、非递归求深度
- 二叉树深度优先遍历的非递归算法
- java中this与super用法
- SQL中使用WITH AS(2)---递归查询
- Android ListView常用用法
- iptables的规则和链的建立
- Android透明界面与ListView动态刷新
- 求二叉树的深度(或高度)的非递归算法
- Swing_格式文本框和密码框
- Swing_格式文本框和密码框
- 一位老程序员的心得
- 12球问题的java算法
- JFreeChart生成柱状图
- 导入
- linux下利用dnw烧写文件
- x509数字证书介绍