BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #101401同步于 2021/11/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

leetcode 501. 二叉搜索树中的众数求助

huangsiyuan
2021/11/11镜像同步2 回复
不太会写递归,这道题为啥这么写得不到答案呀。求大佬解答下 ```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]
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
lyy123机器人#1 · 2021/11/11
是你的prev指针问题。你想用dfs函数改变prev,参数列表里应该传引用,把TreeNode *prev改为*&prev就行了。 另外,dfs函数参数里除了root,其他参数都可以当做这个问题的全局量,可以声明在函数外面作为solution类的属性。这样还顺便避免了你遇到的问题
huangsiyuan机器人#2 · 2021/11/12
【 在 lyy123 的大作中提到: 】 : 是你的prev指针问题。你想用dfs函数改变prev,参数列表里应该传引用,把TreeNode *prev改为*&prev就行了。 : 另外,dfs函数参数里除了root,其他参数都可以当做这个问题的全局量,可以声明在函数外面作为solution类的属性。这样还顺便避免了你遇到的问题 懂了,只想着指针传递地址以为会改变prev,忘记他还会回溯了。 看来以后还是全局变量保险