求二叉树的深度和宽度[Java]
2015-07-02 15:52
274 查看
1.二叉树深度
这个可以使用递归,分别求出左子树的深度、右子树的深度,两个深度的较大值+1即可。
2.二叉树宽度
使用队列,层次遍历二叉树。在上一层遍历完成后,下一层的所有节点已经放到队列中,此时队列中的元素个数就是下一层的宽度。以此类推,依次遍历下一层即可求出二叉树的最大宽度。
这个可以使用递归,分别求出左子树的深度、右子树的深度,两个深度的较大值+1即可。
private static int getHeight(BiNode head) { if(head==null) //结束条件 return 0; /* else if(head.left==null||head.right==null) return 1;*/ //这一句可要可不要 else return 1+Math.max(getHeight(head.left), getHeight(head.right)); }
2.二叉树宽度
使用队列,层次遍历二叉树。在上一层遍历完成后,下一层的所有节点已经放到队列中,此时队列中的元素个数就是下一层的宽度。以此类推,依次遍历下一层即可求出二叉树的最大宽度。
private static int getWidth(BiNode head) { if(head==null) return 0; int max=1; LinkedList<BiNode>ll=new LinkedList<BiNode>(); ll.add(head); while(true){ int len=ll.size(); if(len==0) break; while(len>0){ BiNode b=ll.poll(); len--; if(b.left!=null) ll.add(b.left); if(b.right!=null) ll.add(b.right); } max=Math.max(max, ll.size()); } return max; }
相关文章推荐
- MyEclipse修改文件打开方式
- struts2过滤器配置
- Java学习笔记七(文件夹操作)
- struts动态调用方法和集成SessionAware
- JSF结合Spring 引入ViewScope
- Java中的return
- 使用Spring MVC构建Web应用程序
- Spring MVC 框架搭建及详解
- 浅谈java中的return
- Java 递归解决 "只能两数相乘的计算器计算x^y" 问题
- web开发学习笔记
- JSP中javaBean一些问题
- 修改MyEclipse8.5的workspaces
- java 常用系统相关语句
- Java WEB 文件下载
- Java串口通信详解
- 白话spring依赖注入
- Spring IOC-XmlBeanFactory如何加载xml及如何存储转换后的信息
- java框架是什么意思?
- Spring上传文件学习笔记