今日头条的改错题
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;
}
暂时就找到这么几点,和大家讨论一下
#字节跳动#