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;
    }
相关推荐
TCW11211 小时前
AI底层系列:用C++实现线性代数的公式推导与算法设计-8.线性变化(3)
c++·人工智能·算法
皓月斯语2 小时前
B3849 [GESP样题 三级] 进制转换 题解
c++·算法·题解
中微极客2 小时前
剪枝与量化:让YOLO在边缘设备上高效部署
算法·yolo·剪枝
牢姐与蒯2 小时前
双指针算法
数据结构·算法
Hesionberger2 小时前
LeetCode406:重建身高队列精髓解析
开发语言·数据结构·python·算法·leetcode
不要葱花3 小时前
接下来我将复现 10 篇强化学习算法:第 3 篇,一杯喜茶,搞定 Search-R1
算法·面试
geovindu3 小时前
CSharp: Recursion Algorithm
开发语言·后端·算法·c#·递归算法
z小猫不吃鱼3 小时前
ResRep: Lossless CNN Pruning via Decoupling Remembering and Forgetting
算法·cnn·剪枝
卡提西亚3 小时前
leetcode-239. 滑动窗口最大值
算法·leetcode·职场和发展