题目:输入一棵二叉排序树的根节点,判断该树是不是平衡二叉树。
分析:根据平衡二叉树的定义,我们只要计算左右子树的深度,然后通过这两个深度之差去判断是否是平衡二叉树。
代码如下:
/**
* 给定一棵二叉树,判断该二叉树是不是平衡二叉树
*/
package problem2;
/**
* @author Hutongling
*
* @time:2017年3月29日 下午5:21:26
*/
public class 判断二叉树是不是平衡二叉树 {
//求树的深度
static int treeDepth(TreeNode root){
if(root==null)
return 0;
int left=treeDepth(root.getLeftChild());
int right=treeDepth(root.getRightChild());
return (left>right)? left+1:right+1;
}
//根据树左右子树的深度判断是不是平衡二叉树
static boolean isBalanceTree(TreeNode root){
if(root==null)
return true;
int left=treeDepth(root.getLeftChild());
int right=treeDepth(root.getRightChild());
int diff=left-right;
if(diff>1 || diff<-1)
return false;
return isBalanceTree(root.getLeftChild()) && isBalanceTree(root.getRightChild());
}
public static void main(String[] args) {
TreeNode root=new TreeNode(1);
TreeNode rLeft=new TreeNode(2);
TreeNode rRight=new TreeNode(3);
TreeNode rLLeft=new TreeNode(4);
TreeNode rLRight=new TreeNode(5);
TreeNode rRLeft=new TreeNode(6);
TreeNode rRRight=new TreeNode(7);
root.leftChild=rLeft;
root.rightChild=rRight;
rLeft.leftChild=rLLeft;
rLeft.rightChild=rLRight;
rLRight.leftChild=rRLeft;
rRight.rightChild=rRRight;
System.out.println("二叉树为:"+ (isBalanceTree(root)==true? "平衡二叉树":"不是平衡二叉树"));
}
}
树的深度求解可以参看:
http://blog.csdn.net/hutongling/article/details/68067203
代码结果如下:
二叉树为:平衡二叉树