平衡二叉树判断

 

http://blog.csdn.net/qq_27703417/article/details/70960005

 

有一棵二叉树,请设计一个算法判断这棵二叉树是否为平衡二叉树。给定二叉树的根结点root,请返回一个bool值,代表这棵树是否为平衡二叉树。

 

  1. import java.util.*;  
  2. //判断一棵二叉树是否是平衡二叉树,使用递归,以子树的高度作为返回值  
  3. public class CheckBalance {  
  4.     public boolean check(TreeNode root) {  
  5.         //调用递归方法来判断是否是平衡的  
  6.         //如果返回-1表不平衡,如果返回一个具体的值,说明树平衡,返回的是树的高度值  
  7.         boolean result=this.getHeight(root)==-1?false:true;  
  8.         return result;  
  9.     }  
  10.     //这是一个递归的方法,用于返回一棵二叉树的高度,如果平衡返回高度,如果不平衡返回-1  
  11.     private int getHeight(TreeNode root){  
  12.         //基准情形  
  13.         if(root==null) return 0;  
  14.         //先求左子树的高度  
  15.         int leftHeight=this.getHeight(root.left);  
  16.         //判断左子树是否平衡,调用递归方法后总是认为这个方法已经全部执行完毕  
  17.         if(leftHeight==-1) return -1;  
  18.         //再求右子树的高度  
  19.         int rightHeight=this.getHeight(root.right);  
  20.         //判断右子树是否平衡  
  21.         if(rightHeight==-1) return -1;  
  22.         //判断高度差是否过大  
  23.         if(Math.abs(leftHeight-rightHeight)>1) return -1;  
  24.         //执行到此处说明二叉树平衡,返回此树的高度(子树较大值+1)  
  25.         return Math.max(leftHeight,rightHeight)+1;  
  26.     }  
  27. }  

 

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)    收藏  举报

导航