Java代码分别用递归和非递归方式计算二叉树的最大深度
来源:互联网 发布:美国10月非农数据预测 编辑:程序博客网 时间:2024/06/05 01:53
转自http://blog.csdn.net/snow_7/article/details/51818580
递归实现
为了求树的深度,可以先求其左子树的深度和右子树的深度,可以用递归实现,递归的出口就是节点为空。返回值为0
代码:
public class Deep { //递归实现1 public int findDeep(BiTree root) { int deep = 0; if(root != null) { int lchilddeep = findDeep(root.left); int rchilddeep = findDeep(root.right); deep = lchilddeep > rchilddeep ? lchilddeep + 1 : rchilddeep + 1; } return deep; }
//递归实现2
public int findDeep1(BiTree root) { if(root == null) { return 0; } else { int lchilddeep = findDeep1(root.left);//求左子树的深度 int rchilddeep = findDeep1(root.left);//求右子树的深度 return lchilddeep > rchilddeep ? lchilddeep + 1 : rchilddeep + 1;//左子树和右子树深度较大的那个加一等于整个树的深度 } }
非递归实现
*利用层次遍历的算法,设置变量level记录当前节点所在的层数,设置变量last指向当前层的最后一个节点,当处理完当前层的最后一个节点,让level指向+1操作。设置变量cur记录当前层已经访问的节点的个数,当cur等于last时,表示该层访问结束。
层次遍历在求树的宽度、输出某一层节点,某一层节点个数,每一层节点个数都可以采取类似的算法。
树的宽度:在树的深度算法基础上,加一个记录访问过的层节点个数最多的变量max,在访问每层前max与last比较,如果max比较大,max不变,如果max小于last,把last赋值给max;*
//非递归实现
public int findDeep2(BiTree root) { if(root == null) return 0; BiTree current = null; LinkedList<BiTree> queue = new LinkedList<BiTree>(); queue.offer(root); int cur,last; int level = 0; while(!queue.isEmpty()) { cur = 0;//记录本层已经遍历的节点个数 last = queue.size();//当遍历完当前层以后,队列里元素全是下一层的元素,队列的长度是这一层的节点的个数 while(cur < last)//当还没有遍历到本层最后一个节点时循环 { current = queue.poll();//出队一个元素 cur++; //把当前节点的左右节点入队(如果存在的话) if(current.left != null) { queue.offer(current.left); } if(current.right != null) { queue.offer(current.right); } } level++;//每遍历完一层level+1 } return level; } public static void main(String[] args) { BiTree root = BiTree.buildTree(); Deep deep = new Deep(); System.out.println(deep.findDeep(root)); System.out.println(deep.findDeep1(root)); System.out.println(deep.findDeep2(root)); } }
阅读全文
0 0
- Java代码分别用递归和非递归方式计算二叉树的最大深度
- 分别用递归和非递归方式实现二叉树的先序、中序和后序遍历
- 二叉树的遍历,递归和非递归,求深度
- 二叉树的深度,递归和非递归实现
- 求解二叉树的深度(递归和非递归)
- 二叉树的深度(递归和非递归)
- 求二叉树深度的递归和非递归算法
- 分别用递归和非递归方式实现二叉树先序、中序和后序遍历(java实现)
- 查找二叉树的实现(查找,删除,插入)分别用递归和非递归
- 非递归求取二叉树的最大/小深度
- Java 非递归方式深度优先遍历二叉树
- 二叉树的遍历 前序 中序 后序 分别实现递归和非递归遍历方式
- 二叉搜索树(递归和非递归分别实现)
- 二叉树的前中后序遍历,递归和非递归方式
- 二叉树的深度(递归和非递归)---java实现
- 计算二叉树的最大宽度(非递归)
- 用递归和非递归方式实现二叉树
- 二叉树最大宽度(递归方式和非递归方式)
- 身份证工具类
- MapReduce中job参数及设置map和reduce的个数
- 农业农村经济发展势头向好 呈现“六个新”
- java中String、StringBuffer、StringBuilder的区别
- 理解Javascript_07_理解instanceof实现原理
- Java代码分别用递归和非递归方式计算二叉树的最大深度
- selenium之时间等待
- Python 包的理解
- 邻乐帮:因为我怕下辈子遇不到你,所以给你当下最好的 人们说,遇到一个对的人的概率是很小的,如果没遇到,那么我们需要耐心去等,如果遇到了,那么,我们就要好好珍惜。 对于我来说,我现在的女朋友就是那个
- 入口文件中的属性
- Java 垃圾收集器以及回收策略及其始末
- mob短信验证码SMSSDK的错误代码
- JPA 级联更新去孤子
- openstack(PIKE) neutron问题排查