(浙大陈越版)数据结构 第三章 树(上) 3.2 二叉树及存储结构

news2024/11/18 23:00:13

目录

3.2.1 二叉树的定义及性质

定义:

二叉树五种基本形态:

特殊二叉树

二叉树的几个重要性质

二叉树的抽象数据类型定义

操作集:

常用遍历:

3.2.2 二叉树的存储结构

顺序存储结构

数组实现

链表实现


3.2.1 二叉树的定义及性质

定义:

二叉树T:一个有穷的结点集合。

  • 这个集合可以为空(称为空二叉树)。
  • 若不为空,则它是由根结点和称为其左子树TL和右子树TR的 两个不相交的二叉树组成。、
  • 可以视作是度为2的树,但有左右子树之分

二叉树五种基本形态:

  1. 空树
  2. 只有一个根结点
  3. 有一个根结点,根结点有左子树(右子树为空)
  4. 有一个根结点,根结点有右子树
  5. 有一个根结点,根结点有左右子树

特殊二叉树

二叉树的几个重要性质

二叉树第i层的最大结点数为:2^i-1(i>=1)

深度为k的二叉树有最大结点总数为:(2^k) - 1(k>=1) 最大时称为满二叉树

二叉树结点可以分为三种类型:

  • 叶结点:没有子结点的个数,称为n0
  • 只有一个子结点的个数,称为n1
  • 有两个子结点的个数,称为n2

则n0=n2+1

证明:用边的数量来证明,总边数=n0+n1+n2-1,n0对向下的边没有贡献,前面的等式可以写成n0*0+n1*1+n2*2 = n0+n1+n2-1,整理即可得到待证式子

二叉树的抽象数据类型定义

类型名称:二叉树

数据对象集:一个有穷的结点集合

数据对象集若不为空,则由根结点和其左右二叉子树组成

操作集:

BT∈BinTree,item∈ElementType,重要操作:

Boolean IsEmpty(BinTree BT):判断BT是否为空

void Traversal(BinTree BT):遍历,按某顺序访问每个结点

BinTree CreateBinTree():创建一个二叉树

常用遍历:

先序遍历(根->左子树->右子树)voidPreOrderTraversal(BinTree BT);

中序遍历(左子树->根->右子树)voidInOrderTraversal(BinTree BT);

后序遍历(左子树->右子树->根)voidPostOrderTraversal(BinTree BT);

层次遍历(从上到下,从左到右)void LevelOrderTraversal(BinTree BT);

3.2.2 二叉树的存储结构

顺序存储结构

数组实现

首先我们想到用数组实现,而之前提到的完全二叉树就非常契合,我们可以按从上到下,从左往右的顺序存储N个结点的完全二叉树的结点父子关系

 一般二叉树也可采用这种结构,即在没有数据的位置留空数据,但仍然会浪费空间

链表实现

一般二叉树在前面已经提到,可以使用一个结点包含三个域,一个存储数据信息,一个指向左子树,一个指向右子树

typedef struct TreeNode *BinTree;
typedef BinTree Position;
struct TreeNode{
    ElementType Data;
    BinTree Left;
    BinTree Right;
}

 

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

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

相关文章

RK3588平台开发系列讲解(项目篇)YOLOv5部署测试

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、YOLOv5环境安装二、YOLOv5简单使用2.1、获取预训练权重文2.2、YOLOv5简单测试2.3、转换为rknn模型2.4、部署到 RK 板卡三、airockchip/yolov5简单测试3.1、转换成rknn模型并部署到板卡沉淀、分享、成长,让自己和他…

PyTorch-Transforms

目录 1. 基本知识 2. 常见的Transforms 2.1 ToTensor的使用 2.2 Normalize的使用 2.3 Resize的使用 2.4 Compose的使用 2.5 RandomCrop的使用 1. 基本知识 图片引用来自b站up主:我是土堆 tf.py(如何使用transforms里面的工具) 具体…

1 echarts与map相遇

echarts与map 版本 "echarts": "^5.1.2","echarts-gl": "^2.0.9",效果 基本方法 echarts中地图大多是以地理坐标为主,数据格式使用geojson数据格式。geojson是GIS数据格式中第二常用格式,使用GIS软件都能实现…

英文论文(sci)解读复现【NO.11】一种先进的基于深度学习模型的植物病害检测:近期研究综述

此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

简单个人电话号码查询系统

系列文章 任务19 简单个人电话号码查询系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数 四、小组成员及分工五、 测试文件读取添加联系人删除联系人修改联系人查询联系人退出 六、源代…

(三) PID控制中的噪声过滤

在前面的章节里,我们谈到了积分环节由于执行器的物理限制导致的积分项Wind-up,通过设置饱和限幅器,选择性关闭积分环节来完成Wind-up问题。 今天我们要解决的问题就是微分环节可能存在的问题。通过传感器我们可以观测出一个被控量的大小&…

奇偶校验位

原理 奇偶校验位有两种类型:偶校验位与奇校验位。 以偶校验位来说,如果一组给定数据位中1的个数是奇数,补一个bit为1,使得总的1的个数是偶数。例:0000001, 补一个bit为1, 00000011。 以奇校验位来说,如果给…

电子科技大学编译原理复习笔记(二):数据类型

目录 前言 重点一览 引言 内部类型 内部类型的特点 内部类型的优越性 用户定义类型 ⭐超重点:六种数据类型聚合方式 ⭐抽象数据类型(重点、考点) 类型操作 类型检查 类型转换 类型等价 实现模型 本章小结 前言 本复习笔记基于…

Spark 3:Spark Core RDD持久化

RDD 的数据是过程数据 RDD 的缓存 # coding:utf8 import timefrom pyspark import SparkConf, SparkContext from pyspark.storagelevel import StorageLevelif __name__ __main__:conf SparkConf().setAppName("test").setMaster("local[*]")sc SparkC…

flask实现简易图书管理系统

项目结构 技术选型 flask 做后端, 提供数据和渲染html 暂时没有提供mysql, 后续会更新操作mysql和样式美化的版本 起一个flask服务 flask是python的一个web框架, 下面演示如何提供http接口, 并返回json数据 main.py # flask创建http接口 from flask import Flask, request, jso…

Linux 的软件生态 软件包管理器(yum)编译器 - vim

Linux的软件生态 在 手机 ipad 笔记本等等我们使用的产品当中,会有应用商店等等可以下载软件的 软件包管理器,当我们想要下载某一款软件的时候,就去这个应用商店当中搜索,或者是去寻找,找到之后,进行下载&a…

Linux Kernel源码阅读: x86-64 系统调用实现细节(超详细)

0、前言 本文采用Linux 内核 v3.10 版本 本文不涉及调试、跟踪及异常处理的细节 一、系统调用简介 系统调用是用户空间程序与内核交互的主要机制。系统调用与普通函数调用不同,因为它调用的是内核里的代码。使用系统调用时,需要特殊指令以使处理器权限转…

初识Linux操作系统及常用的Linux命令

Linux是一种自由和开放源码的类UNIX操作系统,也是一种基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。伴随互联网的发展,企业对服务器速度和安全的要求越来越高,Linux系统由于具有性能稳定、防火墙组件性能高效、配置简单等…

Java内存模型的抽象结构 JMM

并发编程模型的两个关键问题 线程之间如何通信及线程之间如何同步。 线程之间如何通信:共享内存,消息传递线程之间如何同步通信是指线程之间以何种机制来 交换信息同步是指程序中用于控制不同线程间 操作发生相对顺序 的机制在共享内存的并发模型里&a…

Maven 详细教程(万字长文)

目录 一、Maven的简介二、Maven安装与配置三、Maven POM四、创建 Maven 项目五、Maven项目的构建与测试六、Maven依赖七、Maven仓库(本地仓库远程仓库)八、Maven生命周期(cleansitedefault)九、Maven常用插件十、Maven 版本号约定…

大模型时代的prompt学习(持续更新)

目录 为什么要学prompt基本原则prompt撰写框架Base Prompt FrameworkCRISPE Prompt Framework 场景撰写文案文档竞品分析产品设计数据分析 chain of thoughtzero shotin context learning(few shot)Self-Consistency Program-Aidedprompt tipsTo Do and Not To Doadd examples引…

水下图像0

d_r_1_.jpg 一个拖着电线的水下六足机器人在海水中作业 A robot is exploring the reef on the sea floor A hexapod robot works next to reef at the bottom of the sea A rectangular deep-sea robot swims past a patch of reef An underwater robot is detecting coral …

神经网络视觉AI“后时代”自瞄实现与对抗

通俗一点来说,自瞄是在FPS射击游戏中最为常见的作弊手段之一,当下最火爆的CSGO也深受其扰,在此我说些我自己的看法,欢迎大家在下方留言讨论; (1)软件层面 在神经网络方面的视觉AI应用流行之前&…

面试官:工作三年,还来面初级软件测试?恐怕你的软件测试工程师的头衔要加双引号...

相信身为测试工程师的你可能经历过这些: 已经工作三年了,每个项目都会加班加点全力以赴去完成,薪资增长幅度却不如人意。 听说年后离职的老同事,金三刚拿下高薪offer,年薪直奔50万了。 由于现在的公司接触不到新技术&…

docker(一)安装部署卸载以及基础命令使用

文章目录 1、安装1.1、安装插件1.2、设置源:1.3、安装docker卸载docker:1.4、配置国内源 2、基础命令3、提交某个镜像为新的镜像4、docker 存档 1、安装 机器配置: 1.1、安装插件 [rootdophin ~]# yum -y install yum-utils1.2、设置源: …