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