`

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

分享到:
评论

相关推荐

    程序员面试题精选100题

    "程序员面试题精选100题"是一个集合了多种算法和编程问题的资源,旨在帮助程序员们更好地应对面试挑战。下面将详细探讨这些精选题目所涉及的知识点。 1. **基础算法**:面试中常见的基础算法题包括排序(如快速排序...

    程序员面试题精选100题【数据结构 /算法】

    【程序员面试题精选100题【数据结构 /算法】】是针对求职程序员精心挑选的一系列面试题目,涵盖了数据结构和算法两大核心领域。这些题目旨在帮助应聘者提高面试技巧,提升对技术的理解,以便在激烈的就业市场竞争中...

    程序员面试题精选100题(更新至60)

    例如,本文提到的《程序员面试题精选100题》就旨在为即将进入职场的程序员提供一系列经典的技术面试题目,帮助他们系统地复习相关知识和技术要点,从而提升面试表现。 #### 4. 具体案例分析:将二叉查找树转化为...

    程序员面试题精选100题完整版

    本题要求将二叉查找树转化为一个排序的双向链表,这一转换不仅考验应聘者对二叉树特性的理解,同时也考察了其对链表操作的熟练程度。 #### 1.2 题目描述 题目要求输入一棵二叉查找树,并将其转换为一个排序的双向...

    程序员面试题精选100题.doc

    - **IT公司笔试题算法部分**:这部分包含了更多具体的算法题,如递归实现回文判断、求网格中的黑点分布等问题。 以上是对给定文件中提到的各个知识点的详细解释和分析。这些知识点不仅涵盖了数据结构和算法的基础...

    程序员面试题精选100题(自己整理)

    【知识点详解】 1. **二元查找树(Binary Search ... 这类问题通常出现在程序员的面试中,因为它测试了对数据结构的理解、递归思维以及解决问题的能力。理解和掌握这个问题的解法对于提升编程技巧和面试表现至关重要。

    程序员面试题精选100题.pdf

    在程序员的面试过程中,面试题往往涵盖了许多技术领域,包括数据结构、算法、操作系统、网络、数据库等。这里我们重点讨论的是如何将一个二元查找树(Binary Search Tree, BST)转换成一个排序的双向链表,这是一个...

    程序员面试题精选100题(2008)

    ### 知识点详解 #### 1. 二元查找树的基本概念 - **定义**:二元查找树(Binary Search Tree, BST),又称有序或排序二叉树,是一种特殊的二叉树数据...这种方法不仅可以应用于面试题目,也是实际编程中常用的技术之一。

    常见:程序员面试题精选100题1

    总结,这个面试题涉及了二元查找树、双向链表和递归等核心计算机科学概念。掌握这些知识点对于准备程序员面试至关重要,尤其是对于那些需要处理复杂数据结构和算法的问题。通过深入理解和实践,可以提高解决问题的...

    程序员面试题精选100题完整版.pdf,这是一份不错的文件

    【知识点详解】 1. 二元查找树(Binary Search Tree, BST): ...通过准备和练习这样的面试题,可以帮助提升解决问题的能力,增加获得理想工作的机会。同时,不断学习和分享面试经验也是提高自身技能的重要途径。

Global site tag (gtag.js) - Google Analytics