Day 31

第110题:

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

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

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

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

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

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

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

  

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

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

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

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

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

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

  

 第169题:

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

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

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

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

  

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

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

  

 

 

 

posted @ 2020-07-26 23:54  Liang-Yi  阅读(71)  评论(0编辑  收藏  举报