`

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

    博客分类:
  • java
 
阅读更多

参考: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);
		}
	}
}
 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics