判断二叉树是否平衡及计算二叉树深度和结点个数

参考:http://blog.csdn.net/zz198808/article/details/7621275

平衡二叉树,又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1。

问题:判断一个二叉排序树是否是平衡二叉树这里是二叉排序树的定义解决方案:根据平衡二叉树的定义,如果任意节点的左右子树的深度相差不超过1,那这棵树就是平衡二叉树。首先编写一个计算二叉树深度的函数,利用递归实现。

 

package cn.edu.tju.searchTree;

public class TreeDepth {
/*
 * 若为空,则其深度为0,若只有一个结点则为1
 * 否则,其深度等于左子树和右子树的深度的最大值加1
 */
	public int getDepth(TreeNode node){
		if(node == null){
			return 0;
		}else{
			return getDepth(node.leftChild) > getDepth(node.rightChild) ? (getDepth(node.leftChild) + 1) :(getDepth(node.rightChild) + 1);
		}
	}
	
	/*
	 * getNodeCount:计算二叉树的结点个数
	 */
	public int getNodeCount(TreeNode node){
		if(node == null){
			return 0;
		}else{
			return (getNodeCount(node.leftChild) + getNodeCount(node.rightChild) + 1);
		}
	}
	/*
	 * isBalance:判断二叉树是否平衡
	 * 平衡二叉树,又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:
	 * 它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1。
	 * 根据平衡二叉树的定义,如果【任意】节点的左右子树的深度相差不超过1,那这棵树就是平衡二叉树。
	 */
	public boolean isBalance(TreeNode node){
		if(node == null){
			return true;
		}
		int distance = getDepth(node.leftChild) - getDepth(node.rightChild);
		if(distance > 1 || distance < -1){
			return false;
		}else{
			return isBalance(node.leftChild) && isBalance(node.rightChild);
		}
	}
}
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值