二叉树宽度:使用队列,层次遍历二叉树。在上一层遍历完成后,下一层的所有节点已经放到队列中,此时队列中的元素个数就是下一层的宽度。以此类推,依次遍历下一层即可求出二叉树的最大宽度。
怎么一层一层地分开呢?用一个变量len来记录当前层的结点数,出一个结点就len–,len==0的时候就退出循环,然后又把队列中的节点数赋值给len
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--; 出一个结点-1,为0就退循环
if(b.left!=null)
ll.add(b.left);
if(b.right!=null)
ll.add(b.right);
}
max=Math.max(max, ll.size());
}
return max;
}