数据结构:完全二叉树开胃菜小练习
目录
一.前言
二.完全二叉树的重要结构特点
三.完全二叉树开胃菜小练习
1.一个重要的数学结论
2.简单的小练习
一.前言
关于树及完全二叉树的基础概念(及树结点编号规则)参见:http://t.csdn.cn/imdrahttp://t.csdn.cn/imdra
完全二叉树是一种非常重要的数据结构:
n个结点的完全二叉树的结点编号是从0~(n-1)连续排列的(假设根结点的编号为0),因此将完全二叉树映射到内存中线性存储结构中时内存利用效率十分的高(数组下标和树结点编号建立绝对映射关系).
最经典的完全二叉树线性存储结构就是大小根堆(堆排序的数据结构基础)
二.完全二叉树的重要结构特点
- 假设一个结点总数为n完全二叉树T的高度为k,为了满足各结点编号是0~(n-1)连续排列的结构定义,完全二叉树1~(k-1)层所有结点构成的子结构是一颗满二叉树(也就意味着完全二叉树的所有叶结点都分布在树的最后一层(第k层)):
- 假设一个结点总数为n完全二叉树T的高度为k,为了满足各结点编号是0~(n-1)连续排列的结构定义,完全二叉树的第k层(最后一层)的叶节点必须是连续排列的(也就是意味着结点总数为奇数的完全二叉树不存在出度为1的分枝结点,结点总数为偶数的完全二叉树有且仅有一个出度为1的分枝结点)
三.完全二叉树开胃菜小练习
1.一个重要的数学结论
对任何一棵二叉树, 如果出度为0其叶结点个数为N0, 出度为2的分枝结点个数为N2(包括根) ,则有 N0= N2+1
该结论具体证明参见小青菜的博客 :http://t.csdn.cn/imdrahttp://t.csdn.cn/imdra
2.简单的小练习
- 现有一颗具有 2n 个结点的完全二叉树T,求其叶结点的个数
求解:
设T出度为0的结点个数为N0(即叶结点的个数),
出度为1的结点个数为N1,
出度为2的结点个数为N2。
根据本篇第二章中的结构分析可知,N1要么为1,要么为0
- 若N1 = 0,根据关系式N0 = N2 + 1,可得:2n = N0 + N1 + N2,化简可得N0 = (2n+1)/2,N0不为整数,因此该种情况排除
- 若N1 =1,根据关系式N0 = N2 + 1,可得:2n = N0 + N1 + N2,化简可得N0 = n,满足题意
因此T叶节点个数为n
- 一棵完全二叉树的结点总数为531个,求这棵树的高度
求解:
设该树的高度为k
根据本篇第二章中的结构分析可知,该树前k-1层构成一颗满树(根据等比数列求和公式满树总结点个数为2^(k-1)-1)
而2^9 = 512<531<2^10 = 1024,因此k-1 = 9,可以求得该二叉树的高度为10
- 现有一颗具有767个结点的完全二树T,求其叶子结点个数
求解:
设T出度为0的结点个数为N0(即叶结点的个数),
出度为1的结点个数为N1,
出度为2的结点个数为N2。
根据本篇第二章中的结构分析可知,N1要么为1,要么为0
- 若N1 = 0,根据关系式N0 = N2 + 1,可得:767 = N0 + N1 + N2,化简可得N0 = 384,满足题意
- 若N1 =1,根据关系式N0 = N2 + 1,可得:767 = N0 + N1 + N2,化简可得N0 = 767/2,N0不为整数,因此该种情况排除
因此T叶节点个数为384
数据结构:完全二叉树开胃菜小练习相关推荐
- Python 开胃菜
开胃菜 如果你要用计算机做很多工作,最后你会发现有一些任务你更希望用自动化的方式进行处理.比如,你想要在大量的文本文件中执行查找/替换,或者以复杂的方式对大量的图片进行重命名和整理.也许你想要编写一个 ...
- python菜_1. 开胃菜 — Python tutorial 3.6.3 documentation
1. 开胃菜¶ 如果你要用计算机做很多工作,最后你会发现有一些任务你更希望用自动化的方式进行处理.比如,你想要在大量的文本文件中执行查找/替换,或者以复杂的方式对大量的图片进行重命名和整理.也许你想要 ...
- 鸿蒙系统只是开胃菜,华为MateX只是开胃菜:麒麟990+鸿蒙OS系统+手写笔 这才是华为...
随着9月份的快结束,各大品牌的旗舰机也基本发布完毕,从目前的表现来看,国产手机似乎占了上风.以华为和vivo为代表的国产手机,不管是从产品的设计,还是到技术的创新,都比三星和iPhone好很多,尤其是 ...
- 魅族 MX3 深入拆解第一季:开胃菜
楼主:海岛猫鼬1213 时间:2013-10-25 17:14:00 点击:1420 回复:9 楼主发言:1次 发图:0张 回复 收藏 更多 楼主 各位久等了.从今天开始,楼主会连载MX3 ...
- 伍迷创意随想集 之 烧菜小帮手
有俗话说,抓住男人的心,首先抓住男人的胃.中国人非常讲究吃,而且讲究在家也要吃好.烧一手好菜的确是一个家庭成员的可以称为优秀的素质之一.可是并不是每一个家庭都有这样的烧菜高手. 问题引出 你是否看到过 ...
- C#面向对象(一):明确几个简单的概念作为开胃菜
绝对干货,总结了下C#面向对象的干货内容以及我几年来的使用心得,分享出来 先明确几个简单概念作为开胃菜: 1.命名空间 namespace BackStageManagement.Services 关 ...
- 基于JAVA后台微信买菜小程序系统 开题报告
本科生毕业论文 基于JAVA后台微信买菜小程序系统 开题报告 学 院: 专 业: 年 级: 学生姓名: 指导教师: XXXX大学本科生毕业论文(设计)开题报告书 姓 名 ...
- MateRS能不能升级鸿蒙,华为MateRS只是开胃菜:麒麟980+1536G+5G芯片,网友:确实很吓人!...
原标题:华为MateRS只是开胃菜:麒麟980+1536G+5G芯片,网友:确实很吓人! 华为手机作为国内很既有实力的手机厂商,乃至在世界上都是数一数二的高端手机厂商.华为旗下大家众所周知的两大旗舰产 ...
- 1.开胃菜(基础篇)
1. 开胃菜 如果你在电脑上做了很多工作,最终你会发现有些任务你想自动化.例如,您可能希望对大量文本文件执行搜索和替换,或者以复杂的方式重命名和重新排列一堆照片文件.也许您想编写一个小型的自定义数据库 ...
最新文章
- android平板值得买吗,2021年一月更新1000-2000价位最全平板选购指南
- C#面向对象三大特性之二:继承
- c语言 二进制压缩算法_使用C ++解释的二进制搜索算法
- sqlalchemy与mysql映射
- 基于channel的goroutine
- Android黑名单自动挂断电话
- 遗传算法 matlab实现 多维变量 二进制编码
- 如何用C语言实现【简易关机程序】
- 数独大师级技巧_数独高级解法技巧,数独高手教你如何玩转数独
- 视频会议系统架构和开源解决系统
- D - Miracle Tree(思维+构造+树的直径)
- 六兆年と一夜物語 jzoj3501 最短路
- linux 下lzma压缩可以达到63倍的压缩率
- 虚拟机包OVF和OVA的区别
- shell 编程中空格的使用
- LUOGU1438无聊的数列
- 大数据平台回归SQL
- 报表在linux下部署后中文变成小方块
- kodi+java版_[转] Emby+KODI--完美的NAS多媒体方案
- 格式化代码 format.js