当前位置: 首页 > article >正文

2024-11-30 二叉树的存储结构

一、顺序存储

1.定义一个结构体数组,每一个数组结点包含一个存储元素和一个bool指针来判断节点是否为空。首先利用循环初始化所有结点,使其标记为空,再按照从上至下、从左至右的顺序依次存储完全二叉树中的各个结点。(其中数组为静态数组,包含数量有限)

所需实现的基本操作:

几个重要常考的基本操作:
i的左孩子          --2i
i的右孩子            --2i+1
i的父节点           --li/2]
i所在的层次--「logz(n+1)或Llogzn]+ 1
若完全二叉树中共有n个结点,则
判断i是否有左孩子?         --2i ≤n?
判断i是否有右孩子?        --2i+1 ≤n?
判断i是否是叶子/分支结点?--i>ln/2]?

2.如果不是完全二叉树,则无法用顺序存储来反映结点的关系。 

结论:二叉树的顺序存储结构,知识和存储完全二叉树。

二、链式存储

1.创建结构体结点,包含一个数据域和左右孩子指针,分别指向左孩子和右孩子,如果不存在孩子则指向null。(共有2n个指针,有n+1个指针指向null)(可构造线索二叉树)。

2. (假设每一个数据只包含一个int型的变量)首先定义一个指针指向null(空树),再用malloc函数申请一个根节点。根节点存入数字1,使根节点的左右指针指向null。再有malloc申请一个新空间存放2,接下来使根节点的左孩子指针指向该节点的p,这样他就变成根节点的左孩子,以此类推。

 3.思考:这样找到左右孩子结点非常容易,但找父节点只能从根节点开始遍历。(如果需要经常需要寻找父节点,可以在结构体指针中多设置一个父节点---三叉链表)

总结: 


http://www.kler.cn/a/420111.html

相关文章:

  • 【AI系统】CANN 算子类型
  • Android矩阵Matrix在1张宽平大Bitmap批量绘制N个小Bitmap,Kotlin(1)
  • Springboot入门教程系列HelloWorld
  • 大数据-240 离线数仓 - 广告业务 测试 ADS层数据加载 DataX数据导出到 MySQL
  • 【分页查询】.NET开源 ORM 框架 SqlSugar 系列
  • 深入浅出:开发者如何快速上手Web3生态系统
  • Python语法1
  • .NET8/.NETCore 依赖注入:自动注入项目中所有接口和自定义类
  • HarmonyOS NEXT应用开发,关于useNormalizedOHMUrl选项的坑
  • ES6-14面试题
  • STM32G4系列MCU的Direct memory access controller (DMA)功能介绍之二
  • mysql 5.7安装及安装后无法启动问题处理
  • C++:unordered_map与unordered_set详解
  • 2-jsp-实现增删改功能
  • 【从0学英语】形容词性/名词性物主代词是什么?
  • 深入理解计算机系统,源码到可执行文件翻译过程:预处理、编译,汇编和链接
  • 一.准备环境,从零开始搭建项目
  • Hive学习基本概念
  • Java 中 ArrayList 与 LinkedList 的详细比较
  • 什么是 KDE?
  • numpy.float8不存在;Python中,实现16位浮点数
  • 种花问题算法
  • 运维工作常用Shell脚本(Commonly Used Shell Scripts for Operation and Maintenance Work)
  • 深入解析 Python 异步编程中的 `gather`、`as_completed` 和 `wait`
  • SQL注入--基本概念
  • 01-标准库开发-STM32定时器