程序员面试题精选100题(60)-判断二叉树是不是平衡的

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

 int getHeight(Node node){
   if(node==null){
      return 0;
   }
   int heigth = 1;
   if(node.left!=null){
      height = 1+getHeight(node.left);
  }
   if(node.rigth!=null){
      int h = 1+getHeight(node.right);
      height = height>h?height:h;
   }
  return height;
}

boolean isBalance(Node node){
   if(node==null){
     return true;
   }
   int left = getHeight(node.left);
   int right = getHeight(node.right);
   int diff = left - right;
    if(diff > 1 || diff < -1)
        return false;
   return isBalance(node.left)&&isBalance(node.right);
}


我们用后序遍历的方式遍历二叉树的每一个结点,在遍历到一个结点之前我们已经遍历了它的左右子树。只要在遍历每个结点的时候记录它的深度(某一结点的深度等于它到叶节点的路径的长度),我们就可以一边遍历一边判断每个结点是不是平衡的


boolean isBalance(Node node,Depth d){
   if(node==null){
      d.height=0;
      return true;
   }
   Depth right=new Depth();
   depth left = new Depth();
   if(isBalance(node.left,left)&&isBalance(node.right,right)){
       int diff = left.height-right.height;
       if(diff<=1||diff>=-1){//绝对值小于等于1
        //如果是平衡树,才有必要算深度,然后看上级是不是平衡树
          d.height=left.height>right.height?left.height:right.height;
          return true
       }
   }
   return false;
}

你可能感兴趣的:(java,数据结构)