平衡二叉树判断
Posted zhangxiaoyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平衡二叉树判断相关的知识,希望对你有一定的参考价值。
http://blog.csdn.net/qq_27703417/article/details/70960005
有一棵二叉树,请设计一个算法判断这棵二叉树是否为平衡二叉树。给定二叉树的根结点root,请返回一个bool值,代表这棵树是否为平衡二叉树。
- import java.util.*;
- //判断一棵二叉树是否是平衡二叉树,使用递归,以子树的高度作为返回值
- public class CheckBalance {
- public boolean check(TreeNode root) {
- //调用递归方法来判断是否是平衡的
- //如果返回-1表不平衡,如果返回一个具体的值,说明树平衡,返回的是树的高度值
- boolean result=this.getHeight(root)==-1?false:true;
- return result;
- }
- //这是一个递归的方法,用于返回一棵二叉树的高度,如果平衡返回高度,如果不平衡返回-1
- private int getHeight(TreeNode root){
- //基准情形
- if(root==null) return 0;
- //先求左子树的高度
- int leftHeight=this.getHeight(root.left);
- //判断左子树是否平衡,调用递归方法后总是认为这个方法已经全部执行完毕
- if(leftHeight==-1) return -1;
- //再求右子树的高度
- int rightHeight=this.getHeight(root.right);
- //判断右子树是否平衡
- if(rightHeight==-1) return -1;
- //判断高度差是否过大
- if(Math.abs(leftHeight-rightHeight)>1) return -1;
- //执行到此处说明二叉树平衡,返回此树的高度(子树较大值+1)
- return Math.max(leftHeight,rightHeight)+1;
- }
- }
以上是关于平衡二叉树判断的主要内容,如果未能解决你的问题,请参考以下文章