读书人

软件工程师面试题精选100题(60)-判断二

发布时间: 2012-11-06 14:07:00 作者: rapoo

程序员面试题精选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;}

读书人网 >编程

热点推荐