二叉树的最大深度

时间:2015-07-16 07:40:35

标签: recursion binary-tree

有人可以解释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;
}

2 个答案:

答案 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

最后我们得到了结果。