求二叉树的深度和宽度[Java]

1.二叉树深度

  这个可以使用递归,分别求出左子树的深度、右子树的深度,两个深度的较大值+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;
	}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值