/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void bianli(TreeNode *t, int &cmax, vector<int> &vmax, int &prev, int &cnt)
{
//printf("%d ", prev);
if (t->left)
{
//prev = t->val;
bianli(t->left, cmax, vmax, prev, cnt);
}
if (t->val == prev)
{
cnt++;
if (cnt == cmax)
{
vmax.push_back(t->val);
}
else if (cnt > cmax)
{
cmax = cnt;
vmax.clear();
vmax.push_back(t->val);
}
}
else
{
cnt = 1;
if (cnt == cmax)
{
vmax.push_back(t->val);
}
}
prev = t->val;
if (t->right)
{
bianli(t->right, cmax, vmax, prev, cnt);
}
}
vector<int> findMode(TreeNode* root) {
int cmax = 1, cnt = 1;
vector<int> vmax;
if (root == NULL) return vmax;
int prev = -1;
bianli(root, cmax, vmax, prev, cnt);
return vmax;
}
};
没啥好说的啊,很裸的一个中序遍历,以后看到二叉搜索树就应该想到中序遍历递增这个性质。但是它虽然递增,相等的数在树上不一定挨在一起。
需要注意的是cmax、prev、cnt全都传了引用,他们都是你整棵树递归的全程都需要的变量,不只是某一次函数需要。不知道我说清楚了没,就是它是全程都需要的,所以不能只传递值,要不然你递归、回来、递归、回来就会出问题。
【不够…我每天学习时间还是太少了,效率太低,最近有好多好多杂七杂八的事情怎么办,一定会化繁为简集中精力学习的ᕙ༼ຈلﻝ͜ ຈ༽ᕗ】
【今天上程序设计实验课看到旁边的同学在手动实现字符串函数的一些功能,为char数组动态分配内存,有点像string。感觉他的学习路线和我完全不一样。他在很流畅地写代码实现功能,我好像从来没代码写那么顺溜过。对,原因是我总是不先在脑子里把它想清楚就下手写,这是需要改的。但是关于该做题还是该写些其他什么,我不知道】
【有点死皮赖脸地报名了一个老师的实验项目,看到同组的都是好厉害的同学我有点怯。怕我的实力够不上,但是绝对绝对会尽全力学东西,可能到了一天睡五六个小时喝咖啡度日的时候了吧quq希望 能真的学到东西】