当前位置:网站首页>leetcode刷题:二叉树10(完全二叉树的节点个数)
leetcode刷题:二叉树10(完全二叉树的节点个数)
2022-07-05 19:52:00 【涛涛英语学不进去】
222.完全二叉树的节点个数
给出一个完全二叉树,求出该树的节点个数。
示例 1:
- 输入:root = [1,2,3,4,5,6]
- 输出:6
示例 2:
- 输入:root = []
- 输出:0
示例 3:
- 输入:root = [1]
- 输出:1
提示:
- 树中节点的数目范围是[0, 5 * 10^4]
- 0 <= Node.val <= 5 * 10^4
- 题目数据保证输入的树是 完全二叉树
直接层序遍历查,不失为一种快乐的方法。
package com.programmercarl.tree;
import java.util.ArrayDeque;
import java.util.Deque;
/** * @ClassName CountNodes * @Descriotion TODO * @Author nitaotao * @Date 2022/7/4 10:15 * @Version 1.0 * https://leetcode.cn/problems/count-complete-tree-nodes/ * 222. 完全二叉树的节点个数 **/
public class CountNodes {
public int countNodes(TreeNode root) {
/** * 层序遍历 */
if (root == null) {
return 0;
}
Deque<TreeNode> deque = new ArrayDeque<TreeNode>();
deque.offer(root);
int sum = 0;
while (!deque.isEmpty()) {
int size = deque.size();
while (size > 0) {
root = deque.pop();
sum++;
if (root.left != null) {
deque.offer(root.left);
}
if (root.right != null) {
deque.offer(root.right);
}
size--;
}
}
return sum;
}
}

按照满二叉树的性质,节点数 = 前n-1层节点数 + 最后一层节点数
前n-1层节点数 = 2^(n-1) -1
/** * 根据完全二叉树的性质计算 * * @param root * @return */
public int countNodes(TreeNode root) {
if (root == null) {
return 0;
}
int leftDepth = getDepth(root.left);
int rightDepth = getDepth(root.right);
if (leftDepth == rightDepth) {
//如果深度相等,则左边为满二叉树
// leftDepth是从当前子树的头结点开始计算深度,不是两棵树的根结点
// ( 2 ^ leftDepth - 1 ) + 1 1为两棵树的根结点
return ((1 << leftDepth) - 1) + 1 + countNodes(root.right);
} else {
//右子树为满二叉树
return ((1 << rightDepth) - 1) + 1 + countNodes(root.left);
}
}
/** * 从当前子树 开始计算深度 * * @param root * @return */
public int getDepth(TreeNode root) {
int depth = 0;
while (root != null) {
root = root.left;
depth++;
}
return depth;
}

边栏推荐
- Bitcoinwin (BCW) was invited to attend Hanoi traders fair 2022
- Add data to excel small and medium-sized cases through poi
- Reptile exercises (II)
- [C language] string function and Simulation Implementation strlen & strcpy & strcat & StrCmp
- 股票开户哪里好?网上客户经理开户安全吗
- 多分支结构
- Parler de threadlocal insecurerandom
- leetcode刷题:二叉树17(从中序与后序遍历序列构造二叉树)
- MMO項目學習一:預熱
- PHP uses ueditor to upload pictures and add watermarks
猜你喜欢

如何安全快速地从 Centos迁移到openEuler

建立自己的网站(16)

测试的核心价值到底是什么?

aggregate

How about testing outsourcing companies?

【C语言】字符串函数及模拟实现strlen&&strcpy&&strcat&&strcmp

S7-200SMART利用V90 MODBUS通信控制库控制V90伺服的具体方法和步骤

Android interview, Android audio and video development

Inventory of the most complete low code / no code platforms in the whole network: Jiandao cloud, partner cloud, Mingdao cloud, Qingliu, xurong cloud, Jijian cloud, treelab, nailing · Yida, Tencent clo

Debezium series: record the messages parsed by debezium and the solutions after the MariaDB database deletes multiple temporary tables
随机推荐
Interviewer: what is the internal implementation of set data types in redis?
Worthy of being a boss, byte Daniel spent eight months on another masterpiece
【obs】libobs-winrt :CreateDispatcherQueueController
【obs】libobs-winrt :CreateDispatcherQueueController
ACM getting started Day1
集合
Fundamentals of shell programming (Chapter 9: loop)
Debezium series: PostgreSQL loads the correct last submission LSN from the offset
-v parameter of GST launch
The difference between ID selector and class selector
通配符选择器
Reptile exercises (II)
That's awesome. It's enough to read this article
C#应用程序界面开发基础——窗体控制(6)——菜单栏、工具栏和状态栏控件
Based on vs2017 and cmake GUI configuration, zxing and opencv are used in win10 x64 environment, and simple detection of data matrix code is realized
What are general items
Successful entry into Baidu, 35K monthly salary, 2022 Android development interview answer
手机股票开户安全吗?靠不靠谱啊?
爬虫练习题(二)
[untitled]