首页 > 编程语言 >二叉树的存储结构和操作算法

二叉树的存储结构和操作算法

时间:2023-08-28 19:45:07浏览次数:30  
标签:结点 存储 链表 算法 二叉树 顺序存储 指针

二叉树的存储结构和操作算法

二叉树的存储结构

屏幕截图(299)

1.顺序存储结构(完全二叉树/满二叉树)

2.链式存储结构(一般二叉树).

顺序存储结构

按照满二叉树的结点层次编号,然依次后储存在数组当中

屏幕截图(301)

屏幕截图(302)

如果该二叉树中位置是空的再对应到数组中的时候就使用0来填充.

屏幕截图(303)

屏幕截图(304)

二叉树顺序存储结构的缺点

1.顺序存储结构不能动态的变化

2.如果二叉树退化为右单支树的时候非常浪费空间

所以顺序存储结构适用于满二叉树和完全二叉树

屏幕截图(305)

二叉树的链式存储结构

使用二叉链表储存二叉树,这样的存储结构可以动态扩展.

二叉链表示意图

屏幕截图(306)

二叉链表的抽象数据结构

屏幕截图(307)

#include <iostream>
using namespace std;

typedef struct BiNode {
	int data;//数据域
	struct BiNode *lchild, *rchild; //左孩子指针和右孩子指针

} BiNode, *BiTree;

signed main () {
    
	return 0;
}

二叉树链式存储示意图

两个指针域如果没有该方向没有孩子就设置为NULL,否则指向下一个结点,注意这里的二叉树的结点的定义是递归的定义的.

屏幕截图(308)

空指针域和结点的关系

可以从边上来看(蓝色的箭头),因为根结点是没有双亲的,所以只有n-1个结点有向上的蓝色箭头.因为n个结点有2n个指针域,所以由上面的规律可以看出有n-1个指针域不为空(都指向其孩子结点).所以2n-(n-1)为n+1所以有n+1个空指针域.

屏幕截图(309)

三叉链表

除了有指向左孩子和右孩子的指针还有一个指向双亲的指针,便于从当前结点找到双亲结点,以解决二叉链表无法找到其双亲结点的弊端.

但是总体来说还是二叉链表使用的较为频繁.

屏幕截图(310)

#include <iostream>

using namespace std;

typedef struct TriNode {
	int data;
	struct TriNode *lchild, *rchild, *parent; //左孩子指针,右孩子指针和双亲指针
} TriNode, *TirTree;

signed main () {


	return 0;
}

二叉树的遍历算法

标签:结点,存储,链表,算法,二叉树,顺序存储,指针
From: https://www.cnblogs.com/harper886/p/17663240.html

相关文章

  • 第五章 树与二叉树
    一、二叉树链式存储结构 typedefstructBiTNode{ ElemTypedata; structBiTNode*lchild,*rchild; }BiTNode,*BiTree;遍历先序遍历递归版 voidPreOrder(BiTreeT) { if(T!=NULL) { visit(T);//访问根结点 PreOrder(T->lchild);//递归遍历左子树 Pr......
  • 【C++STL基础入门】vector运算和遍历、排序、乱序算法
    @TOC前言C++标准库提供了丰富的容器和算法,其中vector是最常用的容器之一。它以动态数组的形式存储元素,并提供了许多方便的运算符和算法来操作和处理数据。本文将介绍vector的基本运算、遍历方法、排序算法以及乱序算法。通过学习这些内容,您将能够更加灵活、高效地使用vector容器。......
  • Lnton羚通视频算法算力云平台关于pandas 处理什么样的数据?
    pandas数据表格的表示 想存储一些 Titanic 乘客数据,知道姓名,年龄,性别等;df=pd.DataFrame({"Name":["Braund,Mr.OwenHarris","Allen,Mr.WilliamHenry","Bonnell,Miss.Elizabeth",......
  • Lnton羚通智能分析算法智慧校园AI视频智能分析算法
    智慧校园AI视频智能分析算法是一种利用人工智能和计算机视觉技术对校园监控视频进行实时分析和处理的算法。它可以通过自动检测、识别和分析视频中的各种目标、行为和事件,提供学校管理者和安全人员有关校园安全、教育管理和学生行为的重要信息。下面是一些常见的智慧校园AI视频智......
  • LRU算法
    思路LRU算法,访问/更新/插入都会将数据置于队尾(假设队头淘汰)。看3种情况的变化:插入:简单置于队尾即可。更新:删除原有节点,新增节点置于队尾。访问:将原节点提至队尾。除了插入只需要简单接到链表尾部以外,更新和访问都是可能操作链表中间的,所以自然地就需要引入Map来快速找到对......
  • 空间密度算法DBSCAN和K-means聚类算法有什么区别和联系
    DBSCAN(Density-BasedSpatialClusteringofApplicationswithNoise)和K-means是两种常见的聚类算法,它们有一些区别和联系。区别:原理:K-means是基于距离的划分聚类算法,通过最小化数据点与聚类中心之间的平方误差来进行聚类。DBSCAN是基于密度的聚类算法,通过将密度相连接的数据......
  • 遗传算法解决航路规划问题(MATLAB)
    遗传算法文章部分图片和思路来自司守奎,孙兆亮《数学建模算法与应用》第二版定义:遗传算法是一种基于自然选择原理和自然遗传机制的搜索(寻优)算法,模拟自然界中的声明进化机制,在人工系统中实现特定目标的优化。本质其实就是群体搜索技术,根据适者生存的原则逐代进化,最终得到最优解......
  • 修改Docker镜像、容器、网络和卷等数据的存储位置|修改wsl在windows下的数据目录
    起因: 我发现这个C盘快要爆炸了C:\Users\Administrator\AppData\Local\Docker\wsl\data\ext4.vhdx(此目录是默认指向,都快100G了)解决步骤:wsl--shutdownwsl--exportdocker-desktop-dataE:\Docker\docker-desktop-data.tarwsl--unregisterdocker-deskto......
  • 二叉树的层序遍历
    /***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNodeleft,TreeNoderight){......
  • [代码随想录]Day29-贪心算法part03
    题目:1005.K次取反后最大化的数组和思路:思路是:先把负数从小到大变成正数(即绝对值由大到小)如果还需要变化(k>0),就变化最小的数在第一步变化的同时顺便记录一个数组和,那么结束之后会有三种情况:k==0;也就是说负数的个数大于等于k,直接返回结果k%2==0;此时全是正整数,......