给「代码随想录」一个星标吧!

不管有多少个节点,大家中秋&&国庆快乐哈

如果之前两篇二叉树:看看这些树的最大深度, 二叉树:看看这些树的最小深度都认真看了的话,这道题目可以分分钟刷掉了,愉快过节!

222.完全二叉树的节点个数

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

示例:

思路

这道题目其实没有必要强调是完全二叉树,就是求二叉树节点的个数。


依然可以使用递归法和迭代法来解决。

这道题目的递归法和求二叉树的深度写法类似, 而迭代法:二叉树层序遍历模板稍稍修改一下,记录遍历的节点数量就可以了。

递归遍历的顺序依然是后序(左右中)。

递归

如果对求二叉树深度还不熟悉的话,看这篇:二叉树:看看这些树的最大深度。

  1. 确定递归函数的参数和返回值:参数就是传入树的根节点,返回就返回以该节点为根节点二叉树的节点数量,所以返回值为int类型。

代码如下:

int getNodesNum(TreeNode* cur) {
  1. 确定终止条件:如果为空节点的话,就返回0,表示节点数为0。

代码如下:

if (cur == NULL) return 0;
  1. 确定单层递归的逻辑:先求它的左子树的节点数量,再求的右子树的节点数量,最后取总和再加一 (加1是因为算上当前中间节点)就是目前节点为根节点的节点数量。

代码如下:

int leftNum = getNodesNum(cur->left);      // 左int rightNum = getNodesNum(cur->right);    // 右int treeNum = leftNum + rightNum + 1;      // 中return treeNum;

所以整体C++代码如下:

class Solution {private:    int getNodesNum(TreeNode* cur) {        if (cur == 0) return 0;        int leftNum = getNodesNum(cur->left);      // 左        int rightNum = getNodesNum(cur->right);    // 右        int treeNum = leftNum + rightNum + 1;      // 中        return treeNum;    }public:    int countNodes(TreeNode* root) {        return getNodesNum(root);    }};

代码精简之后C++代码如下:

class Solution {public:    int countNodes(TreeNode* root) {        if (root == NULL) return 0;        return 1 + countNodes(root->left) + countNodes(root->right);    }};

迭代法

如果对求二叉树层序遍历还不熟悉的话,看这篇:二叉树:层序遍历登场!。

那么只要模板少做改动,加一个变量result,统计节点数量就可以了

class Solution {public:    int countNodes(TreeNode* root) {        queue que;if (root != NULL) que.push(root);        int result = 0;while (!que.empty()) {            int size = que.size();for (int i = 0; i                 TreeNode* node = que.front();                que.pop();                result++;   // 记录节点数量if (node->left) que.push(node->left);if (node->right) que.push(node->right);            }        }return result;    }};

总结

这道题目的解法其实我们在二叉树:看看这些树的最大深度和 二叉树:看看这些树的最小深度都有提到过了。

一样的分析套路,代码也差不多,估计此时大家最这一类求二叉树节点数量以及求深度应该非常熟练了。

没有做过这道题目的同学可以愉快的刷了它。

最后祝大家中秋&&国庆节日愉快哈!

在留言区留下你的思路吧!

-------end-------

我将算法学习相关的资料已经整理到了Github :https://github.com/youngyangyang04/leetcode-master,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图看一看一定会有所收获,如果给你有帮助给一个star支持一下吧!

另外因为公众号改版,时间线被打乱,一些精彩文章大家可能错过了。如果感觉这里的文章对你有帮助,赶紧给「代码随想录」加一个星标吧,方便第一时间阅读文章往期精彩回顾二叉树:看看这些树的最小深度二叉树:看看这些树的最大深度二叉树:我对称么?本周小结!(二叉树)二叉树:你真的会翻转二叉树么?二叉树:层序遍历登场!二叉树:前中后序迭代方式的写法就不能统一一下么?二叉树:听说递归能做的,栈也能做!二叉树:一入递归深似海,从此offer是路人关于二叉树,你该了解这些!「代码随想录」期待你的关注!

每天8:35准时推送一道经典算法题目,推送的每道题目都不是孤立的,而是由浅入深,环环相扣,帮你梳理算法知识脉络,轻松学算法!

刷题可以加我微信!右边为个人微信,添加时备注:「简单自我介绍」+「组队刷题」我就知道你[在看]

完全二叉树最小深度_二叉树:我有多少个节点?相关推荐

  1. 完全二叉树最小深度_树与二叉树递归c++

    树(Tree) 1.什么是树? 树是n个结点的有限集合. 当n=0时,称为空树.而任意非空树应满足: a.有且仅有一个特定的根结点.如"E"是该树的根结点. b.当n>1时, ...

  2. 利用二叉链表创建二叉树_利用递归解LeetCode第111题:二叉树的最小深度

    题目描述(难度简单) 给定一个二叉树,找出其最小深度.最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,n ...

  3. 二叉树的最小深度——递归法、迭代法

    1题目 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20,null,nu ...

  4. LeetCode 111 二叉树的最小深度

    给定二叉树,求最小深度 思路 1.递归 求根节点的左子树和右子树的最小深度 1.当只有一个根节点时,深度为1 2.当根节点为空时,深度为0 3.当根节点不为空时, (1) 当左子树 或 右子树为空时, ...

  5. 二叉树(六):二叉树的最大深度与最小深度

    一.二叉树的深度与高度 1.二叉树的深度 对于二叉树中的某个节点,其深度是从根节点到该节点的最长简单路径所包含的节点个数,是从上面向下面数的.因此访问某个节点的深度要使用先序遍历 2.二叉树的高度 对 ...

  6. 二叉树中最大/最小深度与叶子数

    首先我们需要了解什么是"树的深度"和"树的叶子". 树的叶子:一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称"叶子". 叶子是指度 ...

  7. 一棵二叉树的中根线索二叉树_二叉树面试题刷题模板(终极版)

    树结构 二叉树的最大深度 后序递归 二叉树最小深度 后序递归 二叉树的直径 后序递归 平衡二叉树 后序递归 小总结 对称的二叉树 递归解法 二叉树的镜像 后序递归 树的子结构 递归解法 二叉搜索树的最 ...

  8. c#二叉树 取叶子节点个数_二叉树的最小深度+完全二叉树的节点个数

    二叉树的最小深度 题目:给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 1: 输入:root = [3,9,20 ...

  9. 二叉树的深度_十七:二叉树的最小深度

    二叉树的最小深度:从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最短路径的长度为树的最小深度. 算法一 /** * @description 二叉树最小深度 * @param {*} ...

最新文章

  1. okhttp请求文件异常解决方法
  2. [原创]Silverlight与PostgreSQL数据库的互操作(CURD完全解析)
  3. Qt 不再使用 LGPLv2.1 授权
  4. 新手探索NLP(十一)——知识图谱
  5. obs 直播 多路推流插件 简介
  6. webpack entry和output配置属性
  7. boost::has_range_iterator相关的测试程序
  8. 机器学习算法 拟合曲线_制定学习曲线以检测机器学习算法中的错误
  9. 33:计算分数加减表达式的值
  10. 浏览器拦截打开新窗口情况总结
  11. 字符串匹配BF/RK/BM/KMP算法
  12. 从数据仓库系统对比看Hive发展前景
  13. thinkphp5 后台多选删除_TP5(thinkPHP框架)实现后台清除缓存功能示例
  14. 什么是波导的简并波,矩形波导和圆波导中的简并有何异同
  15. Vue : Expected the Promise rejection reason to be an Error
  16. python tableview添加内容_如何在Python PyQt4 TableView中以编程方式更改/更新数据?
  17. Linux基本命令总结(初学者可以借鉴学习)
  18. CAD导入arcgisMap进行shp导出异常现象
  19. spring cloud系列eureka客服端搭建
  20. GitHub 上有哪些优秀的 Python 爬虫项目?

热门文章

  1. How to learn wxPython
  2. ios警告与提示对话框
  3. [Linq]Linq To Xml (待整理)
  4. stm32f103插拔pc端的串口引起的问题及解决办法
  5. MiniGUI.cfg 文件详解
  6. ASC0106硬件连接注意事项
  7. 计算机应用基础2010备课,《计算机应用基础》教案——office2010版-(2)
  8. 循环神经网络:RNN、LSTM、GRU、BPTT
  9. 自然语言处理库——TextBlob
  10. c++服务器开发学习--01--c++基础,socket