今天还是日更一篇博文,刚开始的确没有想到,看了大佬的想法后做出来的,这个还是用的递归思想,
首先我们还是贴上题目
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
示例 1:
输入:root = [1,null,3,2,4,null,5,6]
输出:3
示例 2:
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:5
int maxDepth(struct Node* root) {
if (root == NULL) {
return 0;
}
if(root -> numChildren == 0) {
return 1;
}
int maxdepth = 0;
for (int i = 0; i < root -> numChildren; i++) {
maxdepth = fmax(maxdepth,maxDepth(root -> children[i]));
}
return 1 + maxdepth;
}
那么思路来了,首先我们先判断,如果root是空的话 也就是抵达了最下面,那么直接返回0
接下来,如果root的孩子节点的数量是0的话 说明下面没有分支了,那么返回1
接下来先确定一个最大深度的变量
接下来写一个for循环。初始化是1,然后接下来i种植的条件是numChildren的数量,然后i++
接下来可以看到maxdepth的数量是随着maxdepth和maxDepth函数的传入值进行的比较。谁大取谁,
最后返回maxdepth+1是因为最大的值是numchildren,所以说要加一个最上面的头节点
以上就是简单的思路,总之来说用的是递归和二叉树的简单思路
评论 (0)