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;
    }
相关推荐
wabs6666 小时前
关于贪心算法的思考
算法·贪心算法
社交怪人7 小时前
【判断大小】信息学奥赛一本通C语言解法(题号1043)
算法
Snasph7 小时前
GNU Make 用户手册(中文版)
服务器·算法·gnu
江澎涌7 小时前
拆解与 AI 的一次对话
人工智能·算法·程序员
sheeta19988 小时前
LeetCode 每日一题笔记 日期:2026.06.02 题目:3635. 最早完成陆地和水上游乐设施的时间 II
笔记·算法·leetcode
Lsk_Smion8 小时前
力扣实训 _ [102].层序遍历--前序--后续_递归与非递归的实现
数据结构·算法·leetcode
小欣加油10 小时前
leetcode3751 范围内总波动值I
java·数据结构·c++·算法·leetcode
Halo_tjn10 小时前
反射与设计模式1
java·开发语言·算法
V搜xhliang024611 小时前
临床科研新范式:从选题到投稿,AI智能体如何接管全流程?
运维·数据结构·人工智能·算法·microsoft·数据挖掘·自动化
计算机安禾12 小时前
【算法分析与设计】第46篇:近似难度与不可近似性理论
网络协议·算法·ssl