当前位置:网站首页>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;
}
边栏推荐
- okcc呼叫中心有什么作用
- Reptile exercises (II)
- The difference between ID selector and class selector
- Base du réseau neuronal de convolution d'apprentissage profond (CNN)
- 线程池参数及合理设置
- 力扣 1200. 最小绝对差
- Common operators and operator priority
- [OBS] qstring's UTF-8 Chinese conversion to blog printing UTF-8 char*
- Parler de threadlocal insecurerandom
- What are general items
猜你喜欢
Millimeter wave radar human body sensor, intelligent perception of static presence, human presence detection application
再忙不能忘安全
Common - Hero Minesweeper
Worthy of being a boss, byte Daniel spent eight months on another masterpiece
How to apply smart contracts more wisely in 2022?
使用easyexcel模板导出的两个坑(Map空数据列错乱和不支持嵌套对象)
aggregate
Using repositoryprovider to simplify the value passing of parent-child components
力扣 1200. 最小绝对差
【obs】QString的UTF-8中文转换到blog打印 UTF-8 char*
随机推荐
如何安全快速地从 Centos迁移到openEuler
What does software testing do? What are the requirements for learning?
C#应用程序界面开发基础——窗体控制(5)——分组类控件
IBM has laid off 40 + year-old employees in a large area. Mastering these ten search skills will improve your work efficiency ten times
leetcode刷题:二叉树15(找树左下角的值)
挖财钱堂教育靠谱安全吗?
-v parameter of GST launch
【无标题】
手机股票开户安全吗?靠不靠谱啊?
Is it safe for Guohai Securities to open an account online?
selenium 元素信息
司空见惯 - 英雄扫雷鼠
Using repositoryprovider to simplify the value passing of parent-child components
Float.floatToRawIntBits的返回值具体意思,将float转为byte数组
Apprentissage du projet MMO I: préchauffage
C application interface development foundation - form control (5) - grouping control
IBM大面积辞退40岁+的员工,掌握这十个搜索技巧让你的工作效率至上提高十倍
安卓面试宝典,2022Android面试笔试总结
【FAQ】华为帐号服务报错 907135701的常见原因总结和解决方法
Postman core function analysis - parameterization and test report