数据结构--二叉树的存储结构

news2024/12/28 3:35:36

数据结构–二叉树的存储结构

二叉树的顺序存储

#define MaxSize 100
struct TreeNode
{
    ElemType value;
    bool isEmpty;
};
TreeNode tree[MaxSize];

初始化

void init()
{
    for (int i = 0; i < MaxSize; i++)
        tree[i].isEmpty = true;
}

几个重要常考的基本操作:

  • i的左孩子: 2 i 2i 2i
  • i的右孩子: 2 i + 1 2i + 1 2i+1
  • i的父节点: ⌊ i / 2 ⌋ \lfloor i/2 \rfloor i/2
  • i所在的层次: ⌈ log ⁡ 2 ( n + 1 ) ⌉ 或 ⌊ log ⁡ 2 n ⌋ + 1 \lceil\log_2(n+1)\rceil\text{或}\lfloor\log_2n\rfloor+1 log2(n+1)⌉log2n+1

完全二叉树 \color{red}完全二叉树 完全二叉树中共有n个结点,则

  • 判断i是否有左孩子? 2 i ≤ n ? 2\mathrm{i}\leq\mathrm{n}? 2in?
  • 判断i是否有右孩子? 2 i + 1 ≤ n ? 2\mathrm{i}+1\leq\mathrm{n}? 2i+1n?
  • 判断i是否是叶子/分支结点? i > ⌊ n / 2 ⌋ ? \mathrm{i}>\lfloor n/2\rfloor? i>n/2⌋?

如果不是完全二叉树,依然按层序将各节点顺序存储 , 无法从结点编号反映出结点间的逻辑关系 \color{purple}如果不是完全二叉树,依然按层序将各节点顺序存储,无法从结点编号反映出结点间的逻辑关系 如果不是完全二叉树,依然按层序将各节点顺序存储,无法从结点编号反映出结点间的逻辑关系

二叉树的顺序存储中, 一定要把二叉树的结点编号与完全二叉树对应起来 \color{red}一定要把二叉树的结点编号与完全二叉树对应起来 一定要把二叉树的结点编号与完全二叉树对应起来

最坏情况:
高度为h且只有h个结点的单支树(所有结点只有右孩子),也至少需要 2 h − 1 2^h-1 2h1 个存储单元

结论:
二叉树的顺序存储结构,只适合存储完全二叉树

二叉树的链式存储

typedef struct BiTNode
{
    ElemType data; //数据域
    struct BiTNode *lchild, *rchild; //左、右孩子指针
}BiTNode, *BiTree;

n 个结点的 二叉链表 \color{red}二叉链表 二叉链表共有 n + 1 个空链域 \color{red}n+1个空链域 n+1个空链域

可以用于构造线索二叉树 \color{pink}可以用于构造线索二叉树 可以用于构造线索二叉树

typedef struct BiTNode
{
    ElemType data; //数据域
    struct BiTNode *lchild, *rchild; //左、右孩子指针
}BiTNode, *BiTree;


int main()
{
    BiTree root = NULL; //定义一颗空树

    // 插入根结点
    root = (BiTree)malloc(sizeof(BiTNode));
    root->data = {1};
    root->lchild = NULL, root->rchild = NULL;

    // 插入新结点
    BiTNode* p = (BiTree)malloc(sizeof(BiTNode));
    p->data = {2};
    p->lchild = NULL, p->rchild = NULL;
    root->lchild = p; //作为根节点的左孩子

    return 0;
}

如果想要快速找到结点 p 的父结点,我们可以再建立一个指向父结点的指针。

typedef struct BiTNode
{
    ElemType data; //数据域
    struct BiTNode *lchild, *rchild; //左、右孩子指针
    struct BiTnode *parent; //父节点指针
}BiTNode, *BiTree;

知识点回顾与重要考点

二叉树的顺序存储中, 一定要把二叉树的结点编号与完全二叉树对应起来 \color{red}一定要把二叉树的结点编号与完全二叉树对应起来 一定要把二叉树的结点编号与完全二叉树对应起来

  • i的左孩子: 2 i 2i 2i
  • i的右孩子: 2 i + 1 2i + 1 2i+1
  • i的父节点: ⌊ i / 2 ⌋ \lfloor i/2 \rfloor i/2
  • i所在的层次: ⌈ log ⁡ 2 ( n + 1 ) ⌉ 或 ⌊ log ⁡ 2 n ⌋ + 1 \lceil\log_2(n+1)\rceil\text{或}\lfloor\log_2n\rfloor+1 log2(n+1)⌉log2n+1

最坏情况:
高度为h且只有h个结点的单支树(所有结点只有右孩子),也至少需要 2 h − 1 2^h-1 2h1 个存储单元

结论:
二叉树的顺序存储结构,只适合存储完全二叉树

typedef struct BiTNode
{
    ElemType data; //数据域
    struct BiTNode *lchild, *rchild; //左、右孩子指针
}BiTNode, *BiTree;

n 个结点的 二叉链表 \color{red}二叉链表 二叉链表共有 n + 1 个空链域 \color{red}n+1个空链域 n+1个空链域

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

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

相关文章

骨传导蓝牙耳机哪个好,推荐几款造诣不错的骨传导耳机

欢迎来到骨传导耳机的奇妙世界&#xff01;这种别具一格的耳机&#xff0c;也被亲切地称为“不入耳式”耳机。它采用了一种神奇的技术&#xff0c;通过颅骨、骨迷路、内耳淋巴液和听神经之间的信号传导&#xff0c;保护我们的听力。不仅如此&#xff0c;这款耳机的开放式设计&a…

Spring七大组件

一、Spring七大组件 1.核心容器(Spring core) Spring-core相当于一个创建并管理bean的容器&#xff1a; 创建&#xff1a;底层使用反射技术创建bean的实例&#xff1b;管理&#xff1a;容器中的每个bean&#xff0c;spring容器默认按照单例模式管理&#xff1b;设计&#xff1…

0501逻辑存储结构和架构-InnoDB引擎-MySQL-数据库

文章目录 1 逻辑结构1.1 表空间1.2 段1.3 区1.4 页1.5 行 2 架构2.1 内存架构2.1.1 Buffer Pool2.1.2 change bufer2.1.3 自适应哈希2.1.4 log buffer 2.2 磁盘架构2.2.1 System Tablespace2.2.2 File-Per-Table Tablespace2.2.3 General Tablespaces2.2.4 Undo Tablespaces2.2…

NC30 缺失的第一个正整数

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*** param nums int整型一维数组* return int整型*/public int minNumberDisappeared (int[] nums) {// write code hereHashM…

CCF-CSP真题《202303-3 LDAP》思路+python,c++满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202303-3试题名称&#xff1a;LDAP时间限制&#xff1a;12.0s内存限制&#xff1a;1.0GB问题描述&#xff1a; 题目背景 西西艾弗岛运营公司是一家负责维护和运营岛上基础设…

Android Studio实现内容丰富的安卓电影购票系统

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号043 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看电影列表…

datagrip 无法断句

使用datagrip 的时候出现了几个sql 执行会无法断开语句的情况可以在这里设置: When caret outside statement execute:

PADS Layout软件中焊盘各层的释义是什么呢

对于PADS软件而言&#xff0c;焊盘的组成由下面几种组成。 焊盘&#xff1a;包括规则焊盘以及通孔焊盘。 热焊盘&#xff1a;热风盘&#xff0c;也叫花焊盘&#xff0c;在负片中有效&#xff0c;设计用于在负片中焊盘与敷铜的接连方式&#xff0c;防止焊接时散热太快&#xf…

Windows远程连接linux中mysql数据库

我没有mysql并且没有把mysql配置到环境变量中&#xff0c;所以现在我要下载mysql 一.下载mysql Mysql官网下载地址&#xff1a;https://downloads.mysql.com/archives/installer 二.安装mysql 1. 选择设置类型 双击运行mysql-installer-community-8.0.26.msi&#xff0c;这…

网络安全 | 商用密码产品介绍

关注wx&#xff1a; CodingTechWork 密码产品概述 密码 使用特定变换对数据等信息进行加密保护、安全认证的技术、产品和服务。 密码技术 实现密码的加密保护和安全认证等功能的技术&#xff0c;主要包含密码算法、密钥管理和密码协议等。 密码划分 核心密码普通密码商用…

ai绘画图片网站哪个好?这几个好用的ai绘画图片网站分享给你

近期我的朋友公司给它安排了一项艰巨的任务&#xff0c;公司给了他一堆图片&#xff0c;然后要求他根据这些图片生成一些风格类似却又独具特色的优质图片&#xff0c;这可难倒他了&#xff0c;他在机缘巧合的情况下得知了有ai绘画图片生成图片的技术&#xff0c;但它不知道怎么…

Rust 第三天---内存管理与所有权

前面介绍了环境配置以及基础语法,掌握之后已经可以开始用Rust编写一些简单的程序了,今天就要来介绍一下Rust核心的功能—内存管理与所有权 1. 关于内存管理 无论什么高级语言必须考虑到的一点就是编写程序时对于内存的管理问题,更简单一点解释,利用编程语言能快速高效的分配内…

C语言究竟是一门怎样的语言?

对于大部分程序员&#xff0c;C语言是学习编程的第一门语言&#xff0c;很少有不了解C的程序员。 C语言除了能让你了解编程的相关概念&#xff0c;带你走进编程的大门&#xff0c;还能让你明白程序的运行原理&#xff0c;比如&#xff0c;计算机的各个部件是如何交互的&#xf…

40、使用elementUI分别实现前端,后端表格分页

说明&#xff1a;前端单独做的表格分页—用于解决数据过多页面渲染压力&#xff0c;如果是服务器响应数据过慢&#xff0c;使用第二种分页方法–后端分页。以下为分页效果 一、前端分页 1、创建表格 <el-table:key"new Date().getTime()":data"tableData.s…

Linux samba服务器配置教程

此教程适用于Centos 和 Ubuntu&#xff0c;其它Linux系统一般大概率配置命令相同&#xff01; 一、关闭防火墙 1. Centos 查看防火墙状态&#xff1a;systemctl status firewalld.service 关闭防火墙&#xff1a;systemctl stop firewalld.service 永久关闭防火墙&#xff…

Node中npm基本使用

1.创建文件夹 说明&#xff1a;创建一个空文件夹&#xff0c;然后以此目录为工作目录&#xff0c;执行npm init,交互式创建package.json文件(包的配置文件) npm init 注意&#xff1a;package下的name属性不能使用中文&#xff0c;大写&#xff0c;默认值为文件名的名称&…

eNSP-ACL分类

ACL分类 文章目录 ACL分类一、题目要求二、题目分析三、拓扑结构四、基本配置五、测试验证 一、题目要求 1 、 client1能够 ping通server&#xff0c;但是不能telnet 2 、 client2能够 telnet, 但是不能 ping 通server 3 、 使用一张 ACL列表 二、题目分析 使用高级ACL在AR3的…

商用车自动驾驶线控底盘测试报告

一&#xff0e;概述 商用车线控底盘主要用于接收控制指令&#xff0c;完成相应的驱动、档位、制动、转向、声光等动作&#xff0c;从而实现自动驾驶功能。 底盘线控系统测试目的是对驾驶模式&#xff08;Drive Mode&#xff09;、油门&#xff08;Throttle&#xff09;、档位&a…

window10环境下安装pycocotools报错及解决办法

相信大家入门安装相关深度学习项目时可能会遇到相关pycocotools&#xff0c;或者ninja的相关报错&#xff0c;下面图是网上拿的&#xff0c;真实报错我忘了截图&#xff0c;但是报错信息如果提到安装Microsoft Visual Tolls&#xff0c;大概率这个可行。 在网上找了很多推荐的…

Kubernetes(k8s)超详细的安装步骤

目录 一、环境设置 二、基本环境配置 &#xff08;一&#xff09;主机名配置 1、在master虚拟机上操作 2、在node1r虚拟机上操作 3、在node2虚拟机上操作 &#xff08;二&#xff09;VMware网络配置 &#xff08;三&#xff09;虚拟机网络配置 1、在master虚拟机上操作…