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

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);
		}
	}
}

  

posted @ 2015-10-16 17:30  果汁浆  阅读(255)  评论(0)    收藏  举报