有人可以解释maxDepth()函数,返回ldepth和rdepth的值是什么。每次递归时,ldepth和rdepth的值如何增加,我想知道它们存储的是哪些值。 ldepth和rdepth甚至没有用初始值初始化。每个递归过程都会增加值吗?我基本上想知道以下两个步骤ldepth=maxDepth(node->left));
和rdepth=maxDepth(node->right));
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *left;
struct node *right;
};
int maxDepth(struct node *node)
{
if(node==NULL)
return 0;
else
{
int ldepth;
int rdepth;
ldepth=maxDepth(node->left));
rdepth=maxDepth(node->right));
if(ldepth>rdepth)
return (ldepth+1);
else return (rdepth+1);
}
}
struct node* newNode(int data)
{
struct node* node=(struct node*)malloc(sizeof(struct node));
node->data=data;
node->left=NULL;
node->right=NULL;
return node;
}
int main()
{
struct node *root=newNode(1);
root->left=newNode(2);
root->right=newNode(3);
root->left->left=newNode(4);
root->left->right=newNode(5);
printf("Height of tree is %d",maxDepth(root));
getchar();
return 0;
}
答案 0 :(得分:0)
每个递归过程都会增加值吗?
不完全是。只要有子节点,递归就会更深入。一旦满足'if(node == NULL)',即没有叶子,它将返回0到调用节点。只有这样,当值达到'return(ldepth + 1);'
时,值才会递增答案 1 :(得分:0)
最大深度生根。 root是node,其值为1。 作为节点,它具有左节点和右节点。 root的左节点也有左节点和右节点。 所以树看起来像:
1 -> 2 -> 4
| | -> 5
|--> 3
maxDepth取元素1 它查看参数是否为null,因为1不为null,它调用左节点2和右节点3的最大深度
让我们现在专注于2 2不为空,因此它将最大深度调用为4和5
让我们现在专注于4 4不为空,因此它将调用maxdepth为4左右
4左边是NULL所以它将返回值0 现在调用递归的函数继续(maxDepth(4)) ldepth的值现在为0
增加1,我们回到调用函数maxDepth(2)
深度增加1
等
最后我们得到了结果。