【LeetCode】222.完全二叉树的节点数

news/2024/9/22 18:21:47/

1.问题

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

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

示例 1

在这里插入图片描述

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

示例 2

输入:root = []
输出:0

示例 3

输入:root = [1]
输出:1

提示

  • 树中节点的数目范围是[0, 5 * 104]
  • 0 <= Node.val <= 5 * 104
  • 题目数据保证输入的树是 完全二叉树

2.解题思路

2.1 递归

二叉树节点个数通用公式可以总结为:左子树节点数+右子树节点数+1,因而利用递归可以非常快的写出代码:

countNodes(TreeNode root){//空节点,节点个数为0if root为空节点return 0;return countNodes(root.left) + countNodes(root.right) + 1;
}

2.2 广度优先

2.2.1 满二叉树

《数据结构》严蔚敏、吴伟民一书中对于满二叉树具有详细的定义,即一颗深度为k且具有2k-1个节点的二叉树称之为满二叉树。比如:
在这里插入图片描述

2.2.2 完全二叉树

假设对满二叉树的节点进行连续编号,约定编号从根节点开始,自上而下,自左至右。对于深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中编号从1至n的节点一一对应,称之为完全二叉树。比如:
在这里插入图片描述
若root为编号k(k>=1),在完全二叉树中,若root只有左节点,其编号应为2k,若有右节点,则编号为2k+1。

层序遍历直到遇到第一个左子树为空的节点,若编号为k,则节点总数为2k-1,或直到遇到第一个右子树为空的节点,节点总数2k。(参考:102.二叉树的层序遍历)

3.代码

3.1 递归

public int countNodes(TreeNode root) {if(null==root){return 0;}int leftNodes=countNodes(root.left);int rightNodes=countNodes(root.right);return leftNodes + rightNodes + 1;
}

3.2 广度优先

public int countNodes(TreeNode root) {if(null==root){return 0;}//队列Queue<TreeNode> q=new LinkedList<>();//临时节点TreeNode tmp;//入队q.offer(root);//编号int code=0;//结果int res=0;while(!q.isEmpty()){tmp=q.poll();//编号加1code++;//如果左节点为空,结束遍历if(null==tmp.left){res=2*code-1;break;}//否则,加入队列,继续遍历else {q.offer(tmp.left);}if(null==tmp.right){res=2*code;break;}else {q.offer(tmp.right);}}return res;
}

http://www.ppmy.cn/news/56343.html

相关文章

fengMap蜂鸟免费地图使用时报错:Uncaught Error: invalid wire type xx at offset xx

目录 一、问题 二、原因及解决方法 三、总结 tips:如嫌繁琐,直接看总结即可 一、问题 1.加载蜂鸟提供的免费地图时一直报错,无法正常加载地图: 1)具体错误:ngmap.map.min.js:1104 Uncaught Error: invalid wire type 7 at offset 47 at u.skipType (fengmap.map.m…

【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 42页论文及代码

【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 42页论文及代码 相关信息 【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现 1 题目 在银行信用…

【chatGPT 对JavaScript中的类是如何解释的】

chatGPT 对JavaScript中的类是如何解释的 问1&#xff1a;在js中类定义好后&#xff0c;方法与属性应怎样定&#xff0c;它有格式吗&#xff1f; 答1&#xff1a; 在JavaScript中定义类的方式有多种&#xff0c;其中一种是使用ES6的class关键字。在使用class定义类时&#x…

结构型模式-装饰者模式

装饰者模式 概述 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜&#xff0c;当然加配菜需要额外加钱&#xff0c;每个配菜的价钱通常不太一样&#xff0c;那么计算总价就会显得比较麻烦。 使用继承的方式存在…

SAP MRP例外信息解释

SAP中MRP的例外信息&#xff0c;一共分为八类&#xff0c;下面是所有例外信息的解释 第一类&#xff1a; 69&#xff1a;BOM组件可能是递归的&#xff0c;即自己的子集中包括了自己。 02&#xff1a;订单创建日期在过去&#xff0c;可能是没有及时处理&#xff0c;这个建议表…

【Python】selenium工具

目录 1. 安装 2. 测试 3. 无头浏览器 4. 元素定位 5. 页面滑动 6. 按键、填写登录表单 7. 页面切换 Selenium是Web的自动化测试工具&#xff0c;为网站自动化测试而开发&#xff0c;Selenium可以直接运行在浏览器上&#xff0c;它支持所有主流的浏览器&#xff0c;可以接…

转行做PHP程序员都要注意什么?我来聊聊自己的工作经历

最近很多小伙伴问我&#xff0c;从其他部门转到编程工作有没有难度&#xff0c;我是人力资源&#xff0c;辞职自学编程的。在这个行业里&#xff0c;学完编程之后其实也有很多人找不到工作&#xff0c;或者找到的工资很低。但也有些人找到的工作工资很高&#xff0c;而且还有奖…

《软件工程教程》(第2版) 主编:吴迪 马宏茹 丁万宁 第十三章课后习题参考答案

第十三章 软件工程标准与文档 课后习题参考答案 一、简答题 &#xff08;1&#xff09;答&#xff1a;软件工作的范围从原来的只是使用程序设计语言编写程序&#xff0c;扩展到整个软件生存期。如软件概念的形成、需求分析、设计、实现、测试、制造、安装和检验、运行和…