leetcode 501
思路
由于是二叉搜索树,那么我们知道它的特性:使用中序遍历得到的是从小到大排序的,所以我们利用这个规则,使用count来统计每次出现一个新的数的总个数,maxCount统计最大的个数值,result来存储二叉树中的众数,也就是要得到的结果值,pre用于统计前一个节点值
初始化定义好值以后,我们需要使用中序遍历,中间处理逻辑值
当pre还不存在的时候或者前一个节点跟后一个节点不相同时,说明出现了新的数字,要重新开始统计,更新count = 1, 更新节点为当前节点
如果数字相同的话,那么count++
然后比较maxCount和count的值,如果相等,说明当前值也是最大值,如果maxCount < count,那么说吗之前存在result中的数字都不是最大的数字,现在又出现了更大的数字,所以我们重新设置result为当前的数字
最终返回result
实现
var findMode = function (root) {let count = 0, maxCount = 0;let result = [];let pre = null;const deep = (root) => {if(!root) return;// 左deep(root.left)// 中if(!pre || pre.val !== root.val){count = 1;pre = root;}else{count ++}if(maxCount === count){result.push(root.val)}else if(maxCount < count){maxCount = countresult = [root.val]}// 右deep(root.right)}deep(root)return result;
};