求一棵二叉树的宽度
2015-08-01 13:46
232 查看
二叉树的宽度是指具有节点数最多的那一层的结点个数,我们的算法利用层次遍历求出一棵二叉树的宽度,思路在于每次遍历一个节点时递增count,当结束对某一层的遍历后就将该count值与max值相对比,保存较大值。以下就是代码:
/**
* 求出一棵二叉树的宽度
*/
public int getWidth(Node node){
Node qu[]=new Node[255];
int head=0;
int tail=0;
int point=0; //用来指向每一层的最后一个节点
int count=0; //用来计算每一层节点的数目,换层时清0
int max=0; //用来保存节点最多那一层的节点
Node p=node;
if(p!=null){
qu[tail++]=p;
count=0;
point=tail;
max=0;
while(head!=tail){
p=qu[head++];
count++;
if(p.getLeft()!=null){
qu[tail++]=p.left;
}
if(p.getRight()!=null){
qu[tail++]=p.right;
}
if(head==point){
point=tail;
if(count>max)
max=count;
count=0;
}
}
}
return max;
}
/**
* 求出一棵二叉树的宽度
*/
public int getWidth(Node node){
Node qu[]=new Node[255];
int head=0;
int tail=0;
int point=0; //用来指向每一层的最后一个节点
int count=0; //用来计算每一层节点的数目,换层时清0
int max=0; //用来保存节点最多那一层的节点
Node p=node;
if(p!=null){
qu[tail++]=p;
count=0;
point=tail;
max=0;
while(head!=tail){
p=qu[head++];
count++;
if(p.getLeft()!=null){
qu[tail++]=p.left;
}
if(p.getRight()!=null){
qu[tail++]=p.right;
}
if(head==point){
point=tail;
if(count>max)
max=count;
count=0;
}
}
}
return max;
}
相关文章推荐
- Java日志框架——基本概念
- Spring应用 - 2
- getView()执行次数问题(自己再次测试,顺便做个记录)-------再再次
- 敌兵布阵(树状数组)
- 二维码zxing源码分析(二)decode部分
- ural 1017
- HTML <input> 标签的 type 属性
- LeetCode "Different Ways to Add Parentheses"
- win7,linux双系统删除linux系统
- 二维向量:vector<vector<int>>
- hdu 1364 Illusive Chase
- Servlet 取表单的值
- linux高频率命令
- 设计模式 依赖倒转原则 & 里氏代换原则
- nginx File not found 错误分析与解决方法
- 手动升级win10 正式版图文教程
- linux git 常用操作集锦
- hdu 2647 Reward(拓扑排序)
- Android中的抖动解码(inDither)
- PopupMenu的示例