c语言,二叉树的最大深度
请在我的代码上进行修改
题目:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最大深度 3 。
int max=0;
void traverse(struct TreeNode *root,int n)
{
if(root==NULL)return;
else
{
if(maxtraverse(root->left,n+1);
traverse(root->right,n+1);
}
}
int maxDepth(struct TreeNode* root){
traverse(root,1);
return max;
}
你的代码基本上已经实现了找出二叉树的最大深度,但是在 traverse 函数中可以进行一些优化。由于题目要求的是从根节点到最远叶子节点的最长路径上的节点数,所以我们可以直接在遍历过程中记录当前节点所在的深度,而不是通过一个全局变量来记录最大深度。
以下是修改后的代码:
void traverse(struct TreeNode *root, int depth, int *maxDepth) {
if (root == NULL) {
return;
} else {
// 当前节点所在深度加 1
depth++;
if (depth > *maxDepth) {
// 更新最大深度
*maxDepth = depth;
}
traverse(root->left, depth, maxDepth);
traverse(root->right, depth, maxDepth);
}
}
int maxDepth(struct TreeNode* root) {
int max = 0;
traverse(root, 0, &max);
return max;
}
在 traverse 函数中,我们增加了一个 depth 参数来记录当前节点的深度,同时将 max 参数改为指向一个整型变量的指针,以便在函数内部修改最大深度。在遍历左子树和右子树时,我们将深度加 1,同时判断是否需要更新最大深度。
在 maxDepth 函数中,我们初始化最大深度为 0,然后调用 traverse 函数来遍历二叉树,并将最大深度作为指针传入函数。最后返回最大深度即可。
希望这可以帮助到你!