当前位置:大发SEO >> 网络平台 >> 哔哩哔哩

哔哩哔哩免流从哪里扣钱

网络平台 哔哩哔哩 2025-05-10 1196

摘要:在# 1. 题目 [222. 完全二叉树的节点个数](https://leetcode-cn.com/problems/count-complete-tree-nodes/)难度中等686给你一棵 完全二叉树 的根节点 `root` ,求出该树的节点个数。[完全二叉树](https://baike.baidu.com/item/完全二叉树/7773232?fr=aladdin) 的定...

在# 1. 题目

哔哩哔哩免流从哪里扣钱

[222. 完全二叉树的节点个数](https://leetcode-cn.com/problems/count-complete-tree-nodes/)

难度中等686

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

[完全二叉树](https://baike.baidu.com/item/完全二叉树/7773232?fr=aladdin) 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 `h` 层,则该层包含 `1~ 2h` 个节点。

示例 1:

![img](https://assets.leetcode.com/uploads/2021/01/14/complete.jpg)

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

输出:6

示例 2:

输入:root = []

输出:0

示例 3:

输入:root = [1]

输出:1

提示:

树中节点的数目范围是`[0, 5 * 104]`

`0 <= Node.val <= 5 * 104`

题目数据保证输入的树是 完全二叉树

进阶:遍历树来统计节点是一种时间复杂度为 `O(n)` 的简单解决方案。你可以设计一个更快的算法吗?

2. 题解

3. code

c++

class Solution {

public:

int countNodes(TreeNode* root) {

if (!root) return 0;

TreeNode* left = root->left;

TreeNode* right = root->right;

int leftDepth = 0, rightDepth = 0;

while (left) {

left = left->left;

leftDepth++;

}

while (right) {

right = right->right;

rightDepth++;

}

if (leftDepth == rightDepth) {

return (2 << leftDepth) - 1;

}

return countNodes(root->left) + countNodes(root->right) + 1;

}

};

4. 心得

相关推荐
友情链接