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