首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

软件工程师面试题精选100题(60)-判断二叉树是不是平衡的

2012-11-06 
程序员面试题精选100题(60)-判断二叉树是不是平衡的题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉

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

热点排行