数据结构课上笔记11

满二叉树 (Full binary tree)

除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树。

国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。

国外(国际)定义:a binary tree T is full if each node is either a leaf or possesses exactly two childnodes.

大意为:如果一棵二叉树的结点要么是叶子结点,要么它有两个子结点,这样的树就是满二叉树。(一棵满二叉树的每一个结点要么是叶子结点,要么它有两个子结点,但是反过来不成立,因为完全二叉树也满足这个要求,但不是满二叉树)

从图形形态上看,满二叉树外观上是一个三角形。

图一

从数学上看,满二叉树的各个层的结点数形成一个首项为1,公比为2的等比数列。

因此由等比数列的公式,满二叉树满足如下性质。

1、一个层数为k 的满二叉树总结点数为:

  。因此满二叉树的结点树一定是奇数个。

2、第i层上的结点数为: 

3、一个层数为k的满二叉树的叶子结点个数(也就是最后一层): 

 

完全二叉树

 

完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。

可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,则 :

①n= n0+n1+n2 (其中n为完全二叉树的结点总数);又因为一个度为2的结点会有2个子结点,一个度为1的结点会有1个子结点,除根结点外其他结点都有父结点,

②n= 1+n1+2*n2 ;由①、②两式把n2消去得:n= 2*n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,由此得到n0=n/2 或 n0=(n+1)/2。

简便来算,就是 n0=n/2,其中n为奇数时(n1=0)向上取整;n为偶数时(n1=1)。可根据完全二叉树的结点总数计算出叶子结点数。

 

重点:出于简便起见,完全二叉树通常采用数组而不是链表存储

 

对于tree[i]有如下特点:

(1)若i为奇数且i>1,那么tree的左兄弟为tree[i-1];

(2)若i为偶数且i<n,那么tree的右兄弟为tree[i+1];

(3)若i>1,tree的父亲节点为tree[i div 2];

(4)若2*i<=n,那么tree的左孩子为tree[2*i];若2*i+1<=n,那么tree的右孩子为tree[2*i+1];

(5)若i>n div 2,那么tree[i]为叶子结点(对应于(3));

(6)若i<(n-1) div 2.那么tree[i]必有两个孩子(对应于(4))。

(7)满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。

完全二叉树第i层至多有2^(i-1)个节点,共i层的完全二叉树最多有2^i-1个节点。

特点:

1)只允许最后一层有空缺结点且空缺在右边,即叶子结点只能在层次最大的两层上出现;

2)对任一结点,如果其右子树的深度为j,则其左子树的深度必为j或j+1。 即度为1的点只有1个或0个

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构课上笔记12

二叉树的存储结构 顺序存储结构 完全二叉树&#xff1a;用一组地址连续的 存储单元依次自上而下、自左至右存 储结点元素&#xff0c;即将编号为 i 的结点元 素存储在一维数组中下标为 i –1 的分量中。 一般二叉树&#xff1a;将其每个结点与完 全二叉树上的结点相对照&…

kaggle(01)-泰坦尼克号问题

经典又兼具备趣味性的Kaggle案例泰坦尼克号问题 大家都熟悉的『Jack and Rose』的故事&#xff0c;豪华游艇倒了&#xff0c;大家都惊恐逃生&#xff0c;可是救生艇的数量有限&#xff0c;无法人人都有&#xff0c;副船长发话了『lady and kid first&#xff01;』&#xff0c…

数据结构课上笔记13

树存储结构 父节点表示法 数据域&#xff1a;存放结点本身信息。 双亲域&#xff1a;指示本结点的双亲结点在数组中的位置。 对应的树&#xff1a; /* 树节点的定义 */ #define MAX_TREE_SIZE 100typedef struct{TElemType data;int parent; /* 父节点位置域 */ } PTNode;type…

数据结构课上笔记14

图是一种&#xff1a; 数据元素间存在多对多关系的数据结构 加上一组基本操作构成的抽象数据类型。 图 (Graph) 是一种复杂的非线性数据结构&#xff0c;由顶点集合及顶点间的关系&#xff08;也称弧或边&#xff09;集合组成。可以表示为&#xff1a; G&#xff1d;(V, V…

kaggle(03)-自行车租赁预测问题(基础版)

文章目录问题描述&#xff1a;问题解决分析问题&#xff1a;解决问题第一步&#xff1a;读取原始数据第二步&#xff1a;观察原始数据第三步&#xff1a;原始数据的可视化第四步&#xff1a;数据的预处理时间属性的分解第五步&#xff1a;数据的特征提取特征生成特征选择第六步…

二叉树序列化/反序列化

二叉树被记录成文件的过程&#xff0c;为二叉树的序列化 通过文件重新建立原来的二叉树的过程&#xff0c;为二叉树的反序列化 设计方案并实现。 &#xff08;已知结点类型为32位整型&#xff09; 思路&#xff1a;先序遍历实现。 因为要写入文件&#xff0c;我们要把二叉树…

机器学习总结(17)-XGBoost

文章目录lecture17&#xff1a;XGBoost(eXtreme Gradient Boosting)目录1. XGBoost的基本信息2. XGBoost与GBDT的异同点3. XGBoost的原理3.1定义树的复杂度3.2 分裂节点3.3 自定义损失函数4. XGBoost的使用lecture17&#xff1a;XGBoost(eXtreme Gradient Boosting) 目录 1. …

C++基础学习(01)--(介绍,环境配置,基本语法,注释)

文章目录目录一. c介绍二. c开发环境到的配置三. c基本语法四. c注释目录 一. c介绍 C 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言&#xff0c;支持过程化编程、面向对象编程和泛型编程。 C 被认为是一种中级语言&#xff0c;它综合了高级语言和低…

《Head First设计模式》读书笔记_第一章

策略模式 例&#xff1a;设计一个模拟鸭子游戏&#xff0c;游戏中有各种鸭子&#xff0c;一边戏水一边嘎嘎叫。 所以学习设计模式前&#xff0c;我们最先想到的就是设置一个超类&#xff0c;并让其他子类去继承这个类&#xff0c;UML图如下&#xff1a; * * 但是&#xff0…

C++基础学习(02)--(数据类型,变量类型,变量作用域,常量,修饰符类型)

文章目录目录一. 数据类型C 中的数据类型typedefenumeration枚举类型c中变量类型二.变量作用域三.常量四.修饰符类型目录 一. 数据类型 C 中的数据类型 使用编程语言进行编程时&#xff0c;需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着&a…

c++基础学习(03)--(存储类,运算符,循环,判断)

文章目录目录一.存储类二.运算符三.循环whilefor四.判断目录 一.存储类 可见static存储类修饰之后&#xff0c;i的值没有从头开始&#xff0c;而是从上一次的结果中保留下来 #include <iostream>using namespace std; class Data { public:Data(){}~Data(){}void show()…

皇后问题

八皇后问题是一个以国际象棋为背景的问题&#xff1a;如何能够在 88 的国际象棋棋盘上放置八个皇后&#xff0c;使得任何一个皇后都无法直接吃掉其他的皇后&#xff1f;为了达到此目的&#xff0c;任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的…

c++基础学习(04)--(函数、数字、数组、字符串)

文章目录目录1.函数2.数字3.字符串4.数组目录 1.函数 #include <iostream> #include <limits>using namespace std;void swap(int *x , int *y);int main(){int a 100 , b200;cout<<"交换前:"<<"a is :"<<a<<"…

【精品计划0】蓝桥杯 摔手机

原题描述&#xff1a; x星球的居民脾气不太好&#xff0c;但好在他们生气的时候唯一的异常举动是&#xff1a;摔手机。 各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试&#xff0c;并且评定出一个耐摔指数来&#xff0c;之后才允许上市流通。 …

数据结构课上笔记15

图的存储 多重链表&#xff1a;完全模拟图的样子&#xff0c;每个节点内的指针都指向该指向的节点。 节点结构内指针数为度 缺点&#xff1a;浪费空间、不容易操作 数组表示法&#xff08;邻接矩阵表示法&#xff09; 可用两个数组存储。其中一个 一维数组存储数据元素&#…

c++基础学习(05)--(指针,引用)

文章目录目录1.指针2.引用目录 1.指针 #include <iostream>using namespace std;int main () {int var1;char var2[10];cout << "var1 变量的地址&#xff1a; ";cout << &var1 << endl;cout << "var2 变量的地址&#xff…

由旅行商问题认识何为状态压缩

动态规划 动态规划(dynamic programming)是运筹学的一个分支&#xff0c;是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时&#xff0c;提出了著名的最优化原理(pri…

c++基础学习(06)--(时间,输入输出,数据结构)

文章目录目录1.时间2.输入输出数据结构目录 1.时间 当前日期和时间 下面的实例获取当前系统的日期和时间&#xff0c;包括本地时间和协调世界时&#xff08;UTC&#xff09;。 #include <iostream> #include <ctime>using namespace std;int main( ) {// 基于当前…

Abstract Self-Balancing Binary Search Tree

二叉搜索树 二叉查找树&#xff08;Binary Search Tree&#xff09;&#xff0c;&#xff08;又&#xff1a;二叉搜索树&#xff0c;二叉排序树&#xff09;它或者是一棵空树&#xff0c;或者是具有下列性质的二叉树&#xff1a; 若它的左子树不空&#xff0c;则左子树上所有结…

AVL Tree

前言 希望读者 了解二叉搜索树 了解左旋右旋基本操作 https://blog.csdn.net/hebtu666/article/details/84992363 直观感受直接到文章底部&#xff0c;有正确的调整策略动画&#xff0c;自行操作。 二叉搜索树 二叉查找树&#xff08;Binary Search Tree&#xff09;&a…