分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击http://www.captainbed.net

package live.every.day.ProgrammingDesign.CodingInterviewGuide.BinaryTree;import live.every.day.ProgrammingDesign.CodingInterviewGuide.BinaryTree.BinaryTreePrinterSolution2.Node;/*** 统计完全二叉树的节点数** 【题目】* 给定一棵完全二叉树的头节点head,返回这棵树的节点个数。** 【要求】* 如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。** 【难度】* 中等** 【解答】* 遍历整棵树当然可以求出节点数,但这肯定不是最优解法,本文不再详述。* 如果完全二叉树的层数为h,本文的解法可以做到时间复杂度为O(h^2),具体过程如下:* 1、如果head==null,说明是空树,直接返回0。* 2、如果不是空树,就求树的高度,求法是找到树的最左节点看能到哪一层,层数记为h。* 3、这一步是求解的主要逻辑,也是一个递归过程记为bs(node,l,h),node表示当前节点,l表示node所在的层数,h表示整棵树的层数* 是始终不变的。bs(node,l,h)的返回值表示以node为头的完全二叉树的节点数是多少。初始时node为头节点head,l为1,因为head* 在第1层,一共有h层始终不变。* 全部过程请参看如下代码中的nodeNum方法。* 每一层只会选择一个节点node进行bs的递归过程,所以调用bs函数的次数为O(h)。每次调用bs函数时,都会查看node右子树的最左节点,* 所以会遍历O(h)个节点,整个过程的时间复杂度为O(h^2)。** @author Created by LiveEveryDay*/
public class DoStatisticsCompleteBinaryTreeNodeCount {public static int nodeNum(Node head) {if (head == null) {return 0;}return bs(head, 1, mostLeftLevel(head, 1));}public static int bs(Node node, int l, int h) {if (l == h) {return 1;}if (mostLeftLevel(node.right, l + 1) == h) {return (1 << (h - l)) + bs(node.right, l + 1, h);} else {return (1 << (h - l - 1)) + bs(node.left, l + 1, h);}}public static int mostLeftLevel(Node node, int level) {while (node != null) {level++;node = node.left;}return level - 1;}public static void main(String[] args) {Node node1 = new Node(2);Node node2 = new Node(3);Node node3 = new Node(5);Node node4 = new Node(7);Node node5 = new Node(8);Node node6 = new Node(1);Node node7 = new Node(3);node1.left = node2;node1.right = node3;node2.left = node4;node2.right = node5;node3.left = node6;node3.right = node7;System.out.printf("The node count is: %d%n", nodeNum(node1));}}// ------ Output ------
/*
The node count is: 7
*/

统计完全二叉树的节点数-Java相关推荐

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

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

  2. 有关完全二叉树求节点数和前缀树求字符串是否重复的两道算法题

    1.给定一棵完全二叉树的头节点head,求其中的节点个数 递归的方法,时间复杂度为O((logN)²) 首先递归出头节点的左子树的最大深度H,之后再递归头节点的右子树的深度是否等于H,若相等则表示,头 ...

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

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

  4. java 统计文本行数_统计文本文件的行数,单词书,字节数

    [java]代码库import java.io.*; /** * 统计文本文件的行数,单词书,字节数 */ class WordCount { public static int words = 1; ...

  5. 集群节点数和分片数关系_完全二叉树的节点数,你真的会算吗?

    读完本文,你可以去力扣拿下如下题目: 222.完全二叉树的节点个数 ----------- 如果让你数一下一棵普通二叉树有多少个节点,这很简单,只要在二叉树的遍历框架上加一点代码就行了. 但是,如果给 ...

  6. 编写Java脚本统计工程代码总行数

    在新公司工作将近一年了,一直独自一人负责服务端集群的运维和代码的编写.不知不觉从一个Project发展到了七八个Project. 看着越来越多的代码,今天突然想统计一下一共写了多少代码.[这里只统计完 ...

  7. Java 求解完全二叉树的节点个数

    文章目录 一.题目 二.递归法 三.迭代法 四.总结 一.题目 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数. 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其 ...

  8. 漫画:二叉树系列 第七讲(完全二叉树的节点个数)

    在上一篇中,我们学习了解了平衡二叉树,并且利用DFS进行了验证.在本节中,我们将继续学习完全二叉树的相关内容.首先了解一下什么是完全二叉树. 01 完全二叉树 完全二叉树由满二叉树引出,先来了解一下什 ...

  9. 由隐藏层节点数引起的网络准确率的不规则变化02

    (0,2)-81*n*2-(1,0)(0,1) 做一个分类mnist 0,2的二分类三层网络,隐藏层节点数由3-1000共实验了59组值.固定收敛标准δ=1e-6,每组值迭代1999次,统计平均分类准 ...

最新文章

  1. 【数据库】sqlite3数据库备份、导出方法汇总
  2. 苹果A15能征服原神?我劝你还不如买个散热背夹
  3. springboot使用Map接收请求参数
  4. hybris backoffice和产品主数据相关的一些sample data
  5. 如何处理错误消息Please install the Linux kernel header files
  6. lisp6 暖通cad_(完整版)暖通CAD设计技巧1
  7. 基于lfslivecd-x86-6.3-r2145安装vnc和qemu
  8. VIP 时代,详解会员营销系统架构技术实践!
  9. K.image_data_format() == ‘channels_first‘
  10. 浅谈c#变量的命名规则
  11. c# 调用巴斯勒相机 进行图像识别
  12. 数量乘单价秋金额的计算机公式,在电子表格中数量乘以单价等于金额用什么样的公式啊?怎么算呢?...
  13. app是计算机软件,‎App Store 上的“计算器-新版计算机”
  14. QString,QByteArray和QBitArray之间的转换(原创)
  15. ibatis中resultMap和resultClass的区别 以及parameterClass 的取值
  16. DBeaver 连接达梦数据库
  17. 3GPP TS 23501-g51 中英文对照 | 5.2.4 Authorisation
  18. 物联网安全拔“牙”实战——低功耗蓝牙(BLE)初探
  19. C语言单元测试框架详解:第一篇
  20. 软件测试自学吉他和弦,吉他和弦识别algorithm?

热门文章

  1. 【blender动作练习生】从零开始的骨骼绑定学习vol.2
  2. android吸附悬浮按钮,自定义可吸附的悬浮按钮
  3. reflow(重排/回流)、repaint(重绘)及其优化
  4. 数据库中的索引优缺点分析
  5. mysql 索引优缺点
  6. 正态分布,二维正态分布,卡方分布,学生t分布——概率分布学习 python
  7. java基础巩固-宇宙第一AiYWM:为了维持生计,架构知识+分+微序幕就此拉开之Docker(Docker概念:容器、镜像、仓库)、操作命令、Docker网络、分层、K8S<->Docker~整起
  8. EasyNVR视频广场通道点击开始录像报错:录像任务已存在
  9. MFC 中this指针和m_hInstance, m_hWnd使用
  10. java mirai-2.15 qq机器人扫码登录或springboot项目进行扫码登录