二叉树_二叉搜索树中的众数
二叉树_二叉搜索树中的众数
- 一、leetcode-501
- 二、题解
- 1.引库
- 2.代码
一、leetcode-501
二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树
输入:root = [4,2,6,1,3]
输出:1
二、题解
1.引库
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <stack>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <vector>
using namespace std;
2.代码
所以如果本题没有说是二叉搜索树的话,那么就按照上面的思路写!
class Solution {
public:
void traverse(TreeNode *node,unordered_map<int,int> &map){
if(node==NULL) return ;
map[node->val]++;
traverse(node->left,map);
traverse(node->right,map);
return ;
}
… for(int i=0;i<vec.size();i++){
if(vec[i].second==vec[0].second) result.push_back(vec[i].first);
else break;
}
return result;
}
};
是二叉搜索树
既然是搜索树,它中序遍历就是有序的。
class Solution {
public:
int count=0,maxcount=0;
TreeNode *pre=NULL;
vector<int> result;
void traverse(TreeNode *node){
if(node==NULL) return ;
traverse(node->left);
if(pre==NULL){
count=1;
}else if(node->val==pre->val){
count++;
}else{
count=1;
}
pre=node;
if(count==maxcount){
result.push_back(node->val);
}else if(count>maxcount){
maxcount=count;
result.clear();
result.push_back(node->val);
}
traverse(node->right);
return ;
}
vector<int> findMode(TreeNode* root) {
traverse(root);
return result;
}
};