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;
    }
相关推荐
饼饼学习空间智能2 小时前
遥操作数据能否提升机器人自主化水平?详解模仿学习、仿真放大与Sim2Real闭环
人工智能·算法
间歇性努力持续性发呆的野生快乐选手2 小时前
dfs回溯,bfs枚举,完全背包
c++·算法·深度优先·宽度优先
郝学胜_神的一滴3 小时前
干货版《算法导论》17:双数极值配对与卡牌手牌编码最优解
数据结构·算法
nike0good3 小时前
Codeforces Round 1101 (Div. 2) 题解
算法
中年阿甘3 小时前
解析式布局-二次线长布局
线性代数·算法·矩阵
程序喵大人3 小时前
【C++进阶】STL算法与函数对象 -【C++进阶】STL算法与函数对象
开发语言·c++·算法
星轨初途4 小时前
LeetCode 热题 100——day6 三数之和
数据结构·c++·算法·leetcode·职场和发展
鹿角片ljp4 小时前
LeetCode 53. 最大子数组和
算法·leetcode·职场和发展
江屿风5 小时前
【科普】【差集&交集概念落地云相册】流食般投喂
开发语言·c++·笔记·算法·云相册
数模竞赛Paid answer5 小时前
2023年五一杯数学建模A题无人机定点投放问题求解全过程完整文档及程序
算法·数学建模·无人机·五一杯