当前位置:网站首页>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;
}

边栏推荐
- Debezium series: parsing the default value character set
- Successful entry into Baidu, 35K monthly salary, 2022 Android development interview answer
- 挖财钱堂教育靠谱安全吗?
- Realizing deep learning framework from zero -- LSTM from theory to practice [practice]
- c——顺序结构
- Worthy of being a boss, byte Daniel spent eight months on another masterpiece
- [C language] string function and Simulation Implementation strlen & strcpy & strcat & StrCmp
- 股票开户哪里好?网上客户经理开户安全吗
- 2023年深圳市绿色低碳产业扶持计划申报指南
- 95后阿里P7晒出工资单:狠补了这个,真香...
猜你喜欢

MMO project learning 1: preheating

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

建立自己的网站(16)

third-party dynamic library (libcudnn.so) that Paddle depends on is not configured correctl

太牛了,看这篇足矣了

集合

Force buckle 729 My schedule I

Redis cluster simulated message queue

How to safely and quickly migrate from CentOS to openeuler

【合集- 行业解决方案】如何搭建高性能的数据加速与数据编排平台
随机推荐
Is it safe to open a mobile stock account? Is it reliable?
大厂面试必备技能,2022Android不死我不倒
力扣 729. 我的日程安排表 I
深度學習 卷積神經網絡(CNN)基礎
What is the core value of testing?
JMeter 常用的几种断言方法,你会了吗?
Postman core function analysis - parameterization and test report
股票开户哪里好?网上客户经理开户安全吗
多分支结构
Parler de threadlocal insecurerandom
完爆面试官,一线互联网企业高级Android工程师面试题大全
webuploader文件上传 拖拽上传 进度监听 类型控制 上传结果监听控件
leetcode刷题:二叉树13(相同的树)
Multi branch structure
Debezium series: modify the source code to support UNIX_ timestamp() as DEFAULT value
openh264解码数据流向分析
使用easyexcel模板导出的两个坑(Map空数据列错乱和不支持嵌套对象)
leetcode刷题:二叉树17(从中序与后序遍历序列构造二叉树)
通过POI追加数据到excel中小案例
What do software test engineers do? How about the prospect of treatment?