LeetCode:222.完全二叉树节点的数量

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录
LeetCode:222.完全二叉树节点的数量

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(从第 0 层开始),则该层包含 1~ 2h 个节点。

示例 1:

输入:root = [1,2,3,4,5,6]

输出:6

示例 2:

输入:root = []

输出:0

示例 3:

输入:root = [1]

输出:1

类似后序遍历,直接递归

java 复制代码
	public int countNodes(TreeNode root) {
        if (root == null)
            return 0;
        int leftCount = countNodes(root.left);
        int rightCount = countNodes(root.right);
        return 1 + leftCount + rightCount;
    }

利用完全二叉树的特性,通过公式来计算

java 复制代码
	public int countNodes(TreeNode root) {
        if (root == null)
            return 0;
        TreeNode leftNode = root.left;
        int leftDepth = 0;
        while (leftNode != null) {
            leftNode = leftNode.left;
            leftDepth++;
        }
        TreeNode rightNode = root.right;
        int rightDepth = 0;
        while (rightNode != null) {
            rightNode = rightNode.right;
            rightDepth++;
        }
        // 如果左右子树高度相同,即时一颗完全二叉树,可以使用公式来计算节点个数
        if (leftDepth == rightDepth)
            return (2 << leftDepth) - 1;
        int leftCount = countNodes(root.left);
        int rightCount = countNodes(root.right);
        return 1 + leftCount + rightCount;
    }
相关推荐
智者知已应修善业9 小时前
【求中位数】2024-1-23
c语言·c++·经验分享·笔记·算法
地平线开发者10 小时前
PTQ 量化数值范围与优化
算法·自动驾驶
sali-tec10 小时前
C# 基于halcon的视觉工作流-章68 深度学习-对象检测
开发语言·算法·计算机视觉·重构·c#
测试人社区-小明10 小时前
智能弹性伸缩算法在测试环境中的实践与验证
人工智能·测试工具·算法·机器学习·金融·机器人·量子计算
罗西的思考11 小时前
【Agent】MemOS 源码笔记---(5)---记忆分类
人工智能·深度学习·算法
qq_4335545414 小时前
C++数位DP
c++·算法·图论
AshinGau14 小时前
Softmax 与 交叉熵损失
神经网络·算法
似水এ᭄往昔14 小时前
【C++】--AVL树的认识和实现
开发语言·数据结构·c++·算法·stl
栀秋66614 小时前
“无重复字符的最长子串”:从O(n²)哈希优化到滑动窗口封神,再到DP降维打击!
前端·javascript·算法
xhxxx14 小时前
不用 Set,只用两个布尔值:如何用标志位将矩阵置零的空间复杂度压到 O(1)
javascript·算法·面试