From
Leetcode
Status
AC
Date
Oct 13, 2023
Tags
二叉搜索树
Difficulty
中等
题面
给你一个含重复值的二叉搜索树(BST)的根节点
root
,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
- 结点左子树中所含节点的值 小于等于 当前节点的值
- 结点右子树中所含节点的值 大于等于 当前节点的值
- 左子树和右子树都是二叉搜索树
示例 1:
示例 2:
提示:
- 树中节点的数目在范围
[1, 10
4
]
内
10
5
<= Node.val <= 10
5
思路
这段代码实现了在二叉搜索树中寻找出现次数最多的节点值。它使用了中序遍历的方式遍历二叉搜索树,并使用一个计数器来记录当前节点值出现的次数,使用一个变量来记录出现次数最多的节点值的出现次数,使用一个vector来记录出现次数最多的节点值。
在遍历过程中,如果当前节点值等于前一个节点值,则将计数器加1;否则,将计数器重置为1。如果当前节点值出现的次数等于出现次数最多的节点值的出现次数,则将当前节点值加入到vector中;如果当前节点值出现的次数大于出现次数最多的节点值的出现次数,则将出现次数最多的节点值的出现次数更新为当前节点值出现的次数,并将vector清空,并将当前节点值加入到vector中。
最后,
findMode
函数返回vector。searchBST
函数里最后要return
是因为这是一个递归函数,当遍历到叶子节点时,需要返回到上一层递归调用的函数。如果没有return
语句,程序将无法正确返回到上一层递归调用的函数,从而导致程序出错。