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

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

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

如果存在则返回 true,不存在返回 false。

考察重点:完全二叉树定义

方法概括:递归遍历左右子树的深度,左右子树深度一致,说明以当前节点为根的左子树一定是完全二叉树;左右子树深度不一致,说明以当前节点为根的右子树一定是完全二叉树

func getDepth(root *d.TreeNode) int { //计算当前结点的最大深度。由于是完全二叉树,所以最大深度等于最大左子树深度res := 0for root != nil {res++root = root.Left}return res
}func CountNodes(root *d.TreeNode) int {if root == nil {return 0}if root.Left == nil && root.Right == nil {return 1}left := getDepth(root.Left) //得到左右子树深度right := getDepth(root.Right)/**左右子树深度一致,说明以root=1为根的左子树一定是完全二叉树,右子树不一定。所以总结点数=完全二叉左子树 + 根节点 + (右子树)1          12   3      2   32 2 3      2 2 3 3左右子树深度不一致,说明以root=1为根的右子树一定是完全二叉树,左子树一定不是。所以总结点数=完全二叉右子树 + 根节点 + (左子树)12       32   2  3   32 2*/if left == right { //如果深度一致,向右子树继续遍历,同时加上完全二叉的左子树与根节点return CountNodes(root.Right) + (1<<left - 1) + 1} else { //如果深度不一致,向左子树继续遍历,同时加上完全二叉的右子树与根节点return CountNodes(root.Left) + (1<<right - 1) + 1}
}

LeetCode—222. 完全二叉树的节点个数相关推荐

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

    完全二叉树的节点个数 题目链接 描述 示例 初始代码模板 代码 题目链接 https://leetcode-cn.com/problems/count-complete-tree-nodes/ 描述 ...

  2. LeetCode 222. 完全二叉树的节点个数(二分查找)

    1. 题目 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干 ...

  3. leetcode 222. 完全二叉树的节点个数(dfs)

    给出一个完全二叉树,求出该树的节点个数.说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置.若最底层为 ...

  4. LeetCode 222. 完全二叉树的节点个数(递归)

    题目描述 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位 ...

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

    222. 完全二叉树的节点个数 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集 ...

  6. leetcode 222. Count Complete Tree Nodes | 222. 完全二叉树的节点个数(Java)

    题目 https://leetcode.com/problems/count-complete-tree-nodes/ 题解 思路参考左程云<程序员代码面试指南> 顺便贴一下草稿 代码 c ...

  7. 【Leetcode | 47】 222. 完全二叉树的节点个数

    给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置.若最底 ...

  8. Leecode 222. 完全二叉树的节点个数——Leecode日常刷题系列

    题目链接:https://leetcode-cn.com/problems/count-complete-tree-nodes/ 题解汇总:https://leetcode-cn.com/proble ...

  9. 二叉树11:完全二叉树的节点个数

    Leetcode 222.完全二叉树的节点个数 要求是 给出一个完全二叉树,求出该树的节点个数. 完全二叉树的节点数其实是可以在找到最后一层最右侧的元素之后直接使用公式计算的.这里我们需要先明确什么是 ...

最新文章

  1. 抢购系统架构设计原理参考文档
  2. 小程序如何用data的数据控制页面展示_17. 教你零基础搭建小程序:小程序事件绑定(1)
  3. idea中build项目之后生成的target看不见
  4. Kobolds and Catacombs 思维,模拟,前缀,后缀(沈阳)
  5. java如何打logo,利用java给网站图片打上文本或图片logo
  6. LINUX Find命令使用
  7. 睡觉时:新增的Java 8新增功能
  8. PHPCMS 模板的设置
  9. 4-数据结构-串的学习
  10. 数组中的对象的特征值提取生成新对象实现方法
  11. Toontrack Superior Drummer for Mac - 鼓音乐制作工具
  12. redis在windows上的安装
  13. [置顶] 数据结构之 链栈的实现
  14. mysql安装_win版
  15. Java实战项目-移动电商秒杀系统seckill优化
  16. 某项目的双代号网络图如下所示_某工程项目的双代号网络计划如下图所示(时间单位:月)。...
  17. 音视频多媒体开发基础概述之颜色空间(2)YUV YIQ YCrCb CMY颜色空间
  18. python-编程训练题
  19. 中间件 BES 连接池的配置和问题诊断方法
  20. 虚拟机san存储服务器,VMware SAN介绍

热门文章

  1. 10 非受控组件以及受控与非受控的选择方案
  2. 05 state与setState、单向数据流
  3. 《JavaScript 高级程序设计》笔记 第1~5章
  4. virtualbox中安装ubuntu
  5. Linux 操作命令 more
  6. Logcat打印调试信息
  7. CSS 实现背景半透明
  8. android调用照相机拍照获取照片并做简单剪裁
  9. AA级与AAA级台灯 重要指标对比
  10. 机器视觉行业市场现状及发展前景分析