第110题:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。(来自LeetCode)
1、判断是否是平衡二叉树,需要明确不仅是根节点的左右子树要平衡,而且二叉树里面的所有节点的左右子树都需要平衡;
所以首先可以从根节点往下递归,来判断每个节点是否平衡;
想知道这个节点左右子树是否平衡,需要得出两边子树的高度差;
可以定义一个方法helper来计算每个节点的的最大高度(就是子树的最大高度+1);
然后判断根节点两边是否平衡和递归判断所有子节点是否平衡,最终得出结果。
2、由于自顶向下递归会有许多多余的判定,例如每次判断节点是否平衡时,都需要判断他的子树,这里有的步骤就多余了;
所以自底向上来判断二叉树是否平衡就可以减少很多多余的步骤;
从最左边的叶子节点开始,判断这个节点 是否平衡;
平衡的话就返回它的最大高度,不平衡就直接返回-1;
然后判断它的父节点,这里父节点按照递归往上会得到左右子树的高度,然后判断自身是否平衡;
依次向上,最后到达根节点,得出结果是否平衡。
第169题:
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。来源:力扣(LeetCode)
1、可以用哈希表来存储元素和元素出现的个数;
因为题目说明数组内一定有多数元素,所以求出哈希表内键值对里最大的值即可。
2、因为数组内一定有多数元素,那么将数组排序;
多数元素一定会排在数组最中间,直接返回即可。