今日头条的改错题

dfsFind()函数
1. 没有处理node为空的边界条件;
2. 函数内的循环中node类型为Node*调用sons应为node->sons.size()和node->sons[i];
3. 函数递归调用是dep+1
修改如下:
void dfsFind(Node* node, int dep, int counter[])
{
if(node == nullptr) return;
counter[dep]++;
for(int i = 0; i < node->sons.size(); i++)
{
dfsFind(node->sons[i], dep + 1, counter);
}
}
find函数中:
1. 树的深度最大为100000,则保存树各个深度的数组大小应为100001,且数组没有初始化,改为depCounter[100001] = {0};
2. 函数内用来记录最大节点的数目和的变量没有初始化,且记录最多节点所在的层数的变量明与maxDep同名,修改变量名为maxNodeLevel;
修改如下:
int find(Node* root, int maxDep)
{
int depCounter[100001] = {0};
dfsFind(root, 0, depCounter);
int max = 0;
int maxNodeLevel = 1;
for(int i = 1; i < maxDep; i++)
{
if(depCounter[i] > max)
{
max = depCounter[i];
maxNodeLevel = i;
}
}
return maxNodeLevel;
}

暂时就找到这么几点,和大家讨论一下
#字节跳动#
全部评论
头条内推码4EXU9YH 投递链接:https://job.toutiao.com/campus/
点赞 回复 分享
发布于 2017-09-06 08:07
棒啊,楼主
点赞 回复 分享
发布于 2017-08-27 22:06
除了树的深度数组初始化那里,其他和楼主一样
点赞 回复 分享
发布于 2017-08-23 15:51
和楼主一样,我漏了一个node指针应用->
点赞 回复 分享
发布于 2017-08-23 15:23
和楼主一样,但是加了一句 ++i 好于 i++
点赞 回复 分享
发布于 2017-08-23 11:36
struct前面没有typedef 所以后面的调用就是错的
点赞 回复 分享
发布于 2017-08-23 11:27
这边的参变量 int a[]指代数组么,我记得 C++编译通不过的,要么现在C++11可以了么?指代数组么?
点赞 回复 分享
发布于 2017-08-23 11:20
学Java的看到了   以为发错试卷了   只能凭着模糊的C语言简单改改了  
点赞 回复 分享
发布于 2017-08-23 11:09
我没一个写对的。。。
点赞 回复 分享
发布于 2017-08-23 11:08
1. 没有处理node为空的边界条件; 如果需要的话,最好是在函数find()里吧? 另外树的深度从0开始算还是从1 开始算,dfsFind()与find()未统一吧
点赞 回复 分享
发布于 2017-08-23 11:06
补充一处,在对应小标处理有误,第i层的存于Counter[i - 1]中;也就是说根结点那一层也就是第一层存在Counter[0]中。 node->sons.size()这个没找到。maxDeap重名没找到
点赞 回复 分享
发布于 2017-08-23 11:04
哇塞。牛掰呀。这都能想到啊
点赞 回复 分享
发布于 2017-08-23 11:04
depCounter和max没初始化
点赞 回复 分享
发布于 2017-08-23 11:03

相关推荐

05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务