1.题目

一棵完全二叉树的节点总数
题意:已知一棵完全二叉树,求其节点的个数
要求:时间复杂度低于O(N),N为这棵树的节点个数。
公式节点个数=2^n-1

2.思路

低于O(N) 那么我们不可能用层序遍历去求解
我们可以用满二叉树的计算公式去求解
求解完全二叉树的深度

int GetLeftHeight(NODE *Head, int Level)
{while(NULL != Head){Level++;Head = Head->Left;      }return Level - 1;
}

我们知道一颗完全二叉树的深度 等于他最左节点的深度
如果当前节点的右子树的最左节点不是空,那么这个节点的左子树一定是满二叉树,右子树是完全二叉树递归求解
如果当前节点的右子树的最左节点是空,那么右子树一定是满二叉树,左子树是完全二叉树,递归求解

3.代码

int CB(NODE *Head, int Level, int TotalHeight)
{//递归出口 当当前的层数和总层数相同 if(Level == TotalHeight)return 1;//如果右子树上的高度 == 左子树的高度 那么左子树就是一个满二叉树//2^n - 1 + 1(根)  那么右子树就是一颗完全二叉树 递归求解 if(GetLeftHeight(Head->Right, Level+1)  == TotalHeight)return (1<< (TotalHeight-Level)) + CB(Head->Right, Level+1, TotalHeight);//如果不是 那么右子树 肯定是一个满二叉树 左子树是一个完全二叉树//递归求解 右子树比左子树 少一层 elsereturn (1<< (TotalHeight-Level-1)) + CB(Head->Right, Level+1, TotalHeight);
}int CountB(NODE *Head)
{if(NULL == Head)return 0;return CB(Head, 1, GetLeftHeight(Head, 1));
}
int main(int argc, char** argv)
{string Str = "1_2_4_#_#_5_#_#_3_6_#_#_7_#_#_";  queue<string> Queue;split (Str, Queue);NODE *Head = ReconPreOrder(Queue);//PreOrder(Head);//InOrder(Head);//PosOrder(Head);string Str1 = "1_2_#_#_3_4_#_#_5_#_#_";split (Str1, Queue);NODE *Head1 = ReconPreOrder(Queue);if(IsComplete(Head)){cout<<"是一个完全二叉树 ";cout<<"节点个数为 "<<CountB(Head)<<endl;}else{cout<<"不是一个完全二叉树"<<endl;  } if(IsComplete(Head1)){cout<<"是一个完全二叉树 ";cout<<"节点个数为 "<<CountB(Head1)<<endl;}else{cout<<"不是一个完全二叉树"<<endl;  } return 0;
}

完全二叉树的节点数量相关推荐

  1. D16|二叉树的深度+完全二叉树节点数量

    104. 二叉树的最大深度 1.题目 104. 二叉树的最大深度 2.复习前 用递归的方法,想好单层逻辑,且计算深度和数量的可以考虑有返回值的情况,这样会写的简便很多,轻松解决~ class Solu ...

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

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

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

    用递归思路很清晰 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* ...

  4. [JavaScript 刷题] 树 - 完全二叉树的节点个数, leetcode 222

    [JavaScript 刷题] 树 - 完全二叉树的节点个数, leetcode 222 github repo 地址: https://github.com/GoldenaArcher/js_lee ...

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

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

  6. m叉树的叶子节点数量

    一个m叉树,度数为1的节点数为N1,度数为2的节点数为N2,度数为m的节点数为Nm, 求叶子节点的数量 节点总数为 N1 + 2*N2 + 3*N3 + ... +m*Nm +1 则叶子节点数量为 N ...

  7. 数据结构与算法之完全二叉树的节点个数

    数据结构与算法之完全二叉树的节点个数 目录 数据结构与算法之完全二叉树的节点个数 1. 数据结构与算法之完全二叉树的节点个数 (一)思路 先遍历左边界获得树的高度h 遍历右子树的左边界,看看到没到最后 ...

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

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

  9. QuorumPeerMain数量可否和HRegionServer节点数量不一致?

      Hbase节点和Zookeeper节点数量是否一致 备注 Hbase自带的zookeeper 一致 使用的一般是start-hbase.sh 独立zookeeper 可以不一致  

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

    222. 完全二叉树的节点个数 题目描述: 给你一棵 完全二叉树的根节点 root ,求出该树的节点个数. 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值 ...

最新文章

  1. 关于延长物联网设备的生命周期
  2. django-如何让首页不要报错
  3. Python 中xrange和range区别
  4. sql中的while循环_SQL While循环:了解SQL Server中的While循环
  5. 【已解决】ModuleNotFoundError: No module named ‘web’的解决办法:
  6. 刘意JavaSE 学习笔记 Day12-Day14——字符串API(String/StringBuffer/StringBuilder...)
  7. 最小的浏览器-橘子浏览器才1M大小
  8. STM32F7通过QSPI驱动W25Q256芯片
  9. 目前我国网络安全人才市场状况
  10. Python学习笔记-条件语句
  11. 计算机管理无法定位程序输入点,win10系统打开程序提示无法定位程序输入点于动态链接库怎么办...
  12. 搭建本地服务器中遇到无法启动FTP站点问题
  13. 等什么君计算机音乐,等什么君歌曲大全_等什么君最新歌曲_九酷音乐
  14. selenium自动化中停止页面加载
  15. Hyperledger Fabric教程--Peer命令
  16. 计算机系统兼容在哪里,电脑怎么看系统兼容的
  17. 日期计算excel_在Excel中计算日期范围内的项目
  18. 知识图谱(七)——事件抽取
  19. Joplin 软件转换中文
  20. 计算机电源直接连接哪两根线才能开机,电脑电源开关线是哪两根

热门文章

  1. yii2 清除asset资源缓存
  2. php array函数 array_filter 过滤数组中的空值
  3. idea创建gredle项目jar包无法导入
  4. JMS系列(三)-java操作JMS Topic实例
  5. FPGA构建人工神经网络系统应用实例——视障人士便携导航系统
  6. 敏捷个人A2组第一次讨论纪要 如何让别人乐于帮助你?
  7. mysql用utf-8_切记:永远不要在MySQL中使用UTF-8
  8. Web页面的生命周期函数
  9. 3.abp框架code first方式创建表
  10. http重定向到https