C语言二叉树的基本概念(一)

目录

二叉树

二叉树的分类(目前只谈两种)

满二叉树

完全二叉树

二叉树的性质(其余的可以自己总结)

选择练习

二叉树的存储结构

顺序存储方式

链式存储方式


二叉树

定义:二叉树是一种特殊的树状数据结构,它由多个节点组成,每个节点最多有两个子节点(左结点和右结点)这些子节点可以为空,任意的二叉树均由以下几种情况复合而成的:

因此我们可以得到以下结论: 

  1. 二叉树的度小于等于2,二叉树的度不一定等于2,但是度为2的树就是二叉树
  2. 二叉树是有序树,子树有左右之分,不能颠倒

二叉树的分类(目前只谈两种)

满二叉树

定义:每一层的结点数都达到最大值的二叉树称为满二叉树

若二叉树层数为k,且结点总数为(2^k)-1 ,则为满二叉树

完全二叉树

定义:二叉树的最后一层是不满情况的二叉树称为完全二叉树,满二叉树是一种特殊的完全二叉树

若二叉树层数为k,且树中结点总数为[2^(k-1) ,(2^k) - 1],则为完全二叉树

二叉树的性质(其余的可以自己总结)

1. 若规定根节点的层数为1,则棵非空二叉树的第k层上最多有2^(k-1)个结点

2. 若规定根节点的层数为1,则深度为k的二叉树的最大结点总数为(2^k) - 1

3. 若规定根节点的层数为1,则深度为k的二叉树的最小结点总数为2^(k - 1)

4. 完全二叉树中,度为2的结点总数 = 叶子结点总数 - 1

5. 任意一棵二叉树, 叶子节点总数 = 分支节点总数 + 1(根节点)

6. 任意一棵二叉树,结点总数 = 叶子结点总数 + 分支节点总数(度为2的结点)

7. 对于一颗完全二叉树,2 * 叶子结点总数 + 度为1的结点总数 - 1 = 结点总数

8. 完全二叉树 总结点数为偶数 则度为1的结点数为1 总节点数为奇数 则度为1的结点数为0

9. 若规定根节点的层数为1,则具有n个结点的二叉树的深度,h = (log以2为底n+1的对数)

10. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:

  1. 若i=0,i为根节点下标,无双亲节点
  2. 若i>0,i下标的结点的双亲结点的下标为(i-1)/ 2
  3. 若i>0,i下标的结点的左孩子结点的下标为2 * i +1
  4. 若i>0,i下标的结点的左孩子结点的下标为2 * i +2
  5. 对于节点 i,若 2 * i + 1 < n,则节点 i 有左孩子。若 2 * i + 1 >= n,则节点 i 没有左孩子

  6. 对于节点 i,若 2 * i + 2 < n,则节点 i 有右孩子。若 2 * i + 2 >= n,则节点 i 没有左孩子

选择练习

1、某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为(B)

A 不存在这样的二叉树

B 200

C 198

D 199

结点总数 = 叶子结点总数 + 分支结点总数(度为2的结点)399    =       ?    +     199 ? =  200

2、在具有 2n 个结点的完全二叉树中,叶子结点个数为(A )

A n

B n+1

C n-1

D n/2

//文字描述
完全二叉树中,度为2的结点总数 = 叶子结点总数 - 1又因为,叶子结点总数 + 度为1的结点总数 + 度为2的结点总数= 2n则可得:2*叶子结点总数 + 度为1的结点总数 - 1 = 2n完全二叉树中,度为1的结点总数只能为0或1,由于2n为偶数,故度为1的结点总数 = 1因此,叶子结点总数 = n//简化描述
完全二叉树中,有n2 = n0 - 1再根据题设条件,得n0 + n1 + n2 = 2n则可得:2n0 + n1 - 1 = 2n完全二叉树中,n1只能为0或1,由于2n为偶数,故n1 = 1因此,n0 = n

3、一棵完全二叉树的节点数位为531个,那么这棵树的高度为(B )

A 11

B 10

C 8

D 12

若二叉树层数为k,且树中结点总数为[2^(k-1) ,(2^k) - 1],则为完全二叉树A:[2^(11-1) ,(2^11) - 1] = [1024,2047]   1024 > 531B:[2^(10-1) ,(2^10) - 1] = [512,1023]    512  < 531 < 1023C:[2^(8-1) ,(2^8) - 1] = [128,511]       511  < 531D:[2^(12-1) ,(2^12) - 1] = [2048,4095]   2048 > 531

4、一个具有767个节点的完全二叉树,其叶子节点个数为(B)

A 383

B 384

C 385

D 386

完全二叉树 总结点数为偶数 则度为1的结点数为1 总节点数为奇数 则度为1的结点数为02 * 叶子结点总数 + 度为1的结点总数 - 1 = 结点总数767为奇数,故度为1的结点总数为0,故:2 * 叶子结点总数 - 1 = 结点总数2 *      ?     - 1 =    767? = 384

二叉树的存储结构

顺序存储方式

        顺序存储方式即使用组为底层逻辑进行存储一般用于实现完全二叉树,因为对不完全二叉树使用顺序存储会存在空间浪费:

二叉树顺序存储在物理逻辑上是一个数组,在虚拟逻辑上是一颗二叉树

链式存储方式

        链式存储方式即使用链表为底层逻辑进行存储,同时链表还可以表示二叉树中各元素间的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。链式结构又分为二叉链表和三叉链表,前我们学习的一般都是二叉链,在学习至红黑树时会用到三叉链......

~over~

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

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

相关文章

系统调用过程

应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管&#xff0c;因此凡是与共享资源有关的操作&#xff08;如存储分配、/O操作、文件管理等&#xff09;&#xff0c;都必须通过系统调用的方式向操作系统内核提出服务请求&#xff0c;由…

qt 5.15.2 主窗体菜单工具栏树控件功能

qt 5.15.2 主窗体菜单工具栏树控件功能 显示主窗体效果&#xff1a; mainwindow.h文件内容&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QFileDialog> #include <QString> #include <QMessageBox>#inc…

SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

前段时间看到群友讨论压缩包能不能运行&#xff0c;想起了n年前用自解压文件SFX实现的一个“需求”&#xff1a;在没有安装任何应用软件的Windows&#xff08;当时还要支持XP&#xff09;上能双击打开自定义格式的文件。当时第一反应是这“需求”太奇葩了&#xff0c;简直是不可…

【JavaScript】JS——Map数据类型

【JavaScript】JS——Map数据类型 什么是Map?特性Map与Object的比较 map的创建map的属性map相关方法map的遍历 什么是Map? 存储键值对的对象。 能够记住键的原始插入顺序任何值&#xff08;对象或原始值&#xff09;都可以作为键或值。 特性 Map中的一个键只能出现一次&am…

PAT乙级—1002 写出这个数(C语言)

读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入样例&#xff1a; 1234567890987654321123456789 输出样例&#xff1a; yi san wu #include <stdio.h>int main() {char number[100] { \0 };int i 0, sum 0, n[8] {…

应用现代化加速企业数字化转型

目录 一、数字化转型的必要性 二、应用现代化的推动力 数字化时代&#xff0c;企业正面临着前所未有的挑战和机遇。为了保持竞争力&#xff0c;许多企业正在寻求数字化转型&#xff0c;以提升运营效率、优化客户体验、创新商业模式。本文将探讨如何通过应用现代化加速企业数字化…

c++11计时器chrono库

去实现一下开始说的高精度计时器&#xff1a; #ifndef _TimerClock_hpp_ #define _TimerClock_hpp_#include <iostream> #include <chrono>using namespace std; using namespace std::chrono;class TimerClock { public:TimerClock(){update();}~TimerClock(){}v…

MySQL和MongoDB简介以及它们之间的区别

本文主要介绍MySQL和MongoDB的简介以及它们之间的区别。 目录 MySQL简介MySQL的优缺点MySQL的应用场景MongoDB简介MongoDB的优缺点MongoDB的应用场景MySQL和MongoDB的区别 MySQL简介 MySQL是一种开源的关系型数据库管理系统&#xff0c;是世界上最流行的数据库之一。它支持多用…

如何选择合适水下应用的集成电缆传感器?

来源&#xff1a;宏集科技 工业物联网丨宏集干货 | 如何选择合适水下应用的集成电缆传感器&#xff1f; 原文链接&#xff1a;https://mp.weixin.qq.com/s/wbN40niOgpUHy1iSH9Ad3Q 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 前言 许多工业过程都要求将传感器浸…

使用高防IP防护有哪些优势

高防IP是针对互联网服务器在遭受大流量的DDoS攻击后导致服务不可用的情况下&#xff0c;推出的付费增值服务&#xff0c;用户可以通过配置高防IP&#xff0c;将攻击流量引流到高防IP&#xff0c;确保源站的稳定可靠。高防IP相当于搭建完转发的服务器。 高防IP有两种接入方式&a…

项目管理:为什么项目计划必不可少

项目管理计划定义了如何执行、监督和控制项目。项目计划让我们准确地知道在项目的每个阶段应该做什么&#xff0c;在哪里分配资源和时间&#xff0c;以及在事情超出计划或超出预算时要注意什么。 为了项目中获得成功&#xff0c;管理者需要在前期创建一个项目计划&#xff0c…

高速风筒解决方案,基于高性价比的普冉单片机开发

高速风筒也就是高速吹风机&#xff0c;与传统的吹风机相比&#xff0c;高速吹风机具有更强大的风力和更快的干燥速度&#xff0c;可以更快地干燥头发或其他物体表面的水分。它通常由一个电动机驱动&#xff0c;并通过旋转的叶片来产生气流。高速风筒广泛应用于个人护理、美容、…