返回信息流不太会写递归,这道题为啥这么写得不到答案呀。求大佬解答下
```C++
class Solution {
public:
void dfs(TreeNode *root, TreeNode *prev, int &max_count, int &count, vector<int> &ans){
if(root == nullptr) return;
dfs(root->left, prev, max_count, count, ans);
if(prev == nullptr){
count = 1;
}else if(prev->val == root->val){
count++;
}else{
count = 1;
}
prev = root;
if(count == max_count){
ans.push_back(root->val);
}
if(count > max_count){
max_count = count; //更新最大次数,并且清除之前数据
ans.clear();
ans.push_back(root->val);
}
dfs(root->right, prev, max_count, count, ans);
return;
}
vector<int> findMode(TreeNode* root) {
vector<int> ans;
if(root == nullptr) return ans;
int max_count = 0; //记录最大的出现次数
int count = 0; //记录出现次数
TreeNode *prev = nullptr;
dfs(root, prev, max_count, count, ans);
return ans;
}
};
```[ema1]
这是一条镜像帖。来源:北邮人论坛 / cpp / #101401同步于 2021/11/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
leetcode 501. 二叉搜索树中的众数求助
huangsiyuan
2021/11/11镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
是你的prev指针问题。你想用dfs函数改变prev,参数列表里应该传引用,把TreeNode *prev改为*&prev就行了。
另外,dfs函数参数里除了root,其他参数都可以当做这个问题的全局量,可以声明在函数外面作为solution类的属性。这样还顺便避免了你遇到的问题
【 在 lyy123 的大作中提到: 】
: 是你的prev指针问题。你想用dfs函数改变prev,参数列表里应该传引用,把TreeNode *prev改为*&prev就行了。
: 另外,dfs函数参数里除了root,其他参数都可以当做这个问题的全局量,可以声明在函数外面作为solution类的属性。这样还顺便避免了你遇到的问题
懂了,只想着指针传递地址以为会改变prev,忘记他还会回溯了。 看来以后还是全局变量保险