AcWing 1605. 二叉搜索树最后两层结点数量
原题链接
中等
作者:
heiyou
,
2020-05-22 21:47:07
,
所有人可见
,
阅读 845
记录一个会超时的做法, acwing只能过一个数据...
pat网站超时一个数据
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
int n, root, max_depth;
int cnt[1010];
unordered_map<int, int> l, r;
void dfs(int father, int u, int depth)
{
if(u <= father)
{
if(l.count(father) == 0) //左孩子为空
{
l[father] = u;
cnt[depth + 1] ++;
max_depth = max(max_depth, depth + 1);
}
else dfs(l[father], u, depth + 1);
}
else if(u > father)
{
if(r.count(father) == 0)
{
r[father] = u;
cnt[depth + 1] ++;
max_depth = max(max_depth, depth + 1);
}
else dfs(r[father], u, depth + 1);
}
}
int main()
{
cin >> n;
if(n == 1)
{
int x;
cin >> x;
cout << "1 + 0 = 1" << endl;
return 0;
}
for(int i = 0; i < n; i ++)
{
int x;
cin >> x;
if(i == 0) root = x;
else
{
dfs(root, x, 0); //从第0层开始插入
}
}
int a = cnt[max_depth], b = cnt[max_depth - 1];
cout << a << " + " << b << " = " << a+b << endl;
return 0;
}
超时是因为如果测试数据中有两个以上的相同元素时,你这个存储方法判断不了这些相同元素的左右父节点存的到底是这些相同元素中的哪一个