代码随想录算法训练营第十六天|递归 二叉树最大、最小深度 完全二叉树的节点个数

文章介绍了如何使用递归和迭代方法计算二叉树的最大深度和最小深度,以及利用后序遍历和层序遍历来计算完全二叉树的节点总数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

104. 二叉树的最大深度

展开后序遍历

int maxDepth(struct TreeNode* root){

    if (!root) return 0;

    int leftHight = maxDepth(root->left);

    int rightHight = maxDepth(root->right);

    int tmp = leftHight > rightHight ? leftHight : rightHight;

    return tmp+1;

}

精简

int maxDepth(struct TreeNode* root){

    if (!root) return 0;

    return 1 + fmax(maxDepth(root->left), maxDepth(root->right));

}

 

111. 二叉树的最小深度 

这个还不是很透彻,判断子节点那里还是混乱

int minDepth(struct TreeNode* root){

    if (!root) return 0;

    int leftDepth = minDepth(root->left);

    int rightDepth = minDepth(root->right);

   

    if (!root->left && root->right) return 1+rightDepth;

    if (!root->right && root->left) return 1+leftDepth;

    return 1 + fmin(leftDepth, rightDepth);

}

222. 完全二叉树的节点个数 

后序遍历:

int countNodes(struct TreeNode* root){

    if (!root) return 0;

    int leftNum = countNodes(root->left);

    int rightNum = countNodes(root->right);

    int result = leftNum + rightNum + 1;

    return result;

}

层序遍历:

 

int countNodes(struct TreeNode* root){

    if (!root) return 0;

    struct TreeNode* queue[50001];

    int head = 0, tail = 0;

    queue[tail++] = root;

    while (head < tail)

    {

        int start = head;

        head = tail;

        for (int i=start; i<head; i++)

        {

            if (queue[i]->left) queue[tail++] = queue[i]->left;

            if (queue[i]->right) queue[tail++] = queue[i]->right;

        }

    }

    return tail;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

is_xiaotian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值