平衡二叉树判断
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;
- }
- }
private boolean flag = true; //标记是否为平衡二叉树 public boolean IsBalanced_Solution(TreeNode root) { getdepth(root,0); return flag; } public int getdepth(TreeNode root,int depth) { if(!flag) return -1; //不是平衡终止递归 if(root == null) return depth; depth++; int left = getdepth(root, depth); int right = getdepth(root, depth); if(left-right>1||right-left>1){ flag = false; } return left>right?left:right; }
posted on 2017-08-21 23:36 zhangxiaoyu 阅读(279) 评论(0) 收藏 举报
浙公网安备 33010602011771号