501. 二叉搜索树中的众数
程序员文章站
2022-03-03 11:14:17
...
501. 二叉搜索树中的众数
思路
二叉搜索树的中序遍历是一个升序序列,逐个比对当前结点(root)值与前驱结点(pre)值。更新当前节点值出现次数(curTimes)及最大出现次数(maxTimes),更新规则:若curTimes=maxTimes,将root->val添加到结果向量(res)中;若curTimes>maxTimes,清空res,将root->val添加到res,并更新maxTimes为curTimes。
代码
class Solution {
public:
void inorder(TreeNode* root, int& currTimes, int& maxTimes,vector<int>& result,TreeNode*& pre){
if(root == NULL){
return;
}
inorder(root->left,currTimes,maxTimes,result,pre);
if(pre){
currTimes = (root->val == pre->val) ? currTimes+1:1;
}
if(currTimes == maxTimes){
result.push_back(root->val);
}
if(currTimes > maxTimes){
result.clear();
result.push_back(root->val);
maxTimes = currTimes;
}
pre = root;
inorder(root->right,currTimes,maxTimes,result,pre);
}
vector<int> findMode(TreeNode* root) {
vector<int> result;
if(root == NULL){
return result;
}
int currTimes = 1,maxTimes = 0;
TreeNode* pre = NULL;
inorder(root,currTimes,maxTimes,result,pre);
return result;
}
};
上一篇: 采用宽度优先搜索算法求解TSP问题
下一篇: 深度优先搜索算法求解排队问题
推荐阅读
-
Python实现查找二叉搜索树第k大的节点功能示例
-
Java创建二叉搜索树,实现搜索,插入,删除的操作实例
-
Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】
-
Python中的二叉树查找算法模块使用指南
-
Python利用前序和中序遍历结果重建二叉树的方法
-
Python实现查找二叉搜索树第k大的节点功能示例
-
C语言实现线索二叉树的前中后创建和遍历详解
-
荐 Java刷题笔记15:不同的二叉搜索树( Unique Binary Search Trees)
-
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
-
[PHP] 算法-根据前序和中序遍历结果重建二叉树的PHP实现