zoukankan      html  css  js  c++  java
  • Day 31

    第110题:

    给定一个二叉树,判断它是否是高度平衡的二叉树。

    本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。(来自LeetCode)

    1、判断是否是平衡二叉树,需要明确不仅是根节点的左右子树要平衡,而且二叉树里面的所有节点的左右子树都需要平衡;

      所以首先可以从根节点往下递归,来判断每个节点是否平衡;

      想知道这个节点左右子树是否平衡,需要得出两边子树的高度差;

      可以定义一个方法helper来计算每个节点的的最大高度(就是子树的最大高度+1);

      然后判断根节点两边是否平衡和递归判断所有子节点是否平衡,最终得出结果。

      

    2、由于自顶向下递归会有许多多余的判定,例如每次判断节点是否平衡时,都需要判断他的子树,这里有的步骤就多余了;

      所以自底向上来判断二叉树是否平衡就可以减少很多多余的步骤;

      从最左边的叶子节点开始,判断这个节点 是否平衡;

      平衡的话就返回它的最大高度,不平衡就直接返回-1;

      然后判断它的父节点,这里父节点按照递归往上会得到左右子树的高度,然后判断自身是否平衡;

      依次向上,最后到达根节点,得出结果是否平衡。

      

     第169题:

    给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

    你可以假设数组是非空的,并且给定的数组总是存在多数元素。来源:力扣(LeetCode)

    1、可以用哈希表来存储元素和元素出现的个数;

      因为题目说明数组内一定有多数元素,所以求出哈希表内键值对里最大的值即可。

      

    2、因为数组内一定有多数元素,那么将数组排序;

      多数元素一定会排在数组最中间,直接返回即可。

      

     

  • 相关阅读:
    遇见SQL(2)
    遇见SQL(1)
    JAVA自学笔记(10)—Stream流、方法引用
    JAVA自学笔记(9)——网络通信、函数式接口
    JAVA自学笔记(7)—文件
    JAVA自学笔记(6)—异常、线程、函数式编程
    Python--模块Module
    Python--软件目录结构
    Python--迭代器
    Python--生成器
  • 原文地址:https://www.cnblogs.com/liang-yi-/p/13383030.html
Copyright © 2011-2022 走看看