数据结构--树

数据结构 B树系列 每个节点最多有m个子节点,其中m是一个正整数。根节点除外,其他节点至少有⌈m/2⌉个子节点。每个节点中的键值按照非降序排列。对于节点中的键值k,如果有n个子节点,那么节点中的n-1个键值将把节点分为n个区间,第i个区间的键值小于k,第i+1个区间的键值大于等于k。所有叶子节点位于同一层,且不包含任何键值信息,可以看作是外部存储的块。每个非叶子节点中的键值个数比子节点个数少1。每个节点中的键值个数满足:⌈m/2⌉-1 阅读详情

树型结构和图型就是其中十分重要的非线性结构,可以用来描述客观
世界中广泛存在的层次结构和网状结构的关系,如家族谱、城市交通
等。

二叉树不是树的特例

二叉树与无序树不同:
二叉树中,每个结点最多只能有两棵子树,并且有左右之分。二叉
树并非是树的特殊情形,它们是两种不同的数据结构。

二叉树与度数为2的有序树不同:
在有序树中,虽然一个结点的孩子之间是有左右次序的,但是若该
结点只有一个孩子,就无须区分其左右次序。
而在二叉树中,即使是一个孩子也有左右之分。这是二叉树与树的最主要的差别。

满二叉树:在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶结点都在同一层上,这样的一棵二叉树称作满二叉树。

完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。
特点:叶结点只能出现在最下层和次下层,且最下层的叶结点集中在树的左部。

二叉树的性质:

性质1: 在二叉树的第i 层上至多有2^(i-1) 个结点 个结点(i≥1)。
性质2: 深度为k 的二叉树至多有2^(k -1) 个结点(k≥1)。
性质3: 对任何一棵二叉树,如果其叶结点数为n 0 ,度为2 的结点数为n 2 ,则n 0 =n 2 +1。

顺序存储结构:

用一维数组存储存放二叉树中的结点,一般是按照二叉树结点从上至下、从左到右的顺序存储 。
这样的结点在存储位置上的前驱后继关系并不一定就是它们在逻辑上的邻接关系,然而只有通过一些方法确定某结点在逻辑上的前驱结点和后继结点,这种存储才有意义 。
因此 ,依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。

二叉树的顺序存储表示可描述为:

#define MaxNode 100 // 二叉树 二叉树 的最大结点数
typedef ElemType SqBiTree[MaxNode]
// 0号单元存放根结点 号单元存放根结点
SqBiTree bt;

即将bt 定义为含有MaxNode 个ElemType类型元素的一维数组类型元素的一维数组。

链式存储结构:

二叉树的链式存储结构是用链表来表示一棵二叉树,即用链来指示着元素的逻辑关系。通常有下面两种形式:

1.二叉链表存储
这里写图片描述

二叉链表的定义:

template <class Entry>
class Binary_tree 
{
    public:
        // Add methods here.
    protected:
        // Add auxiliary function prototypes here.
        Binary_node<Entry> *root;
};

template <class Entry>
struct Binary_node 
{
    // data members:
    Entry data;
    Binary_node<Entry> *left;
    Binary_node<Entry> *right;
    // constructors:
    Binary_node( );
    Binary_node(const Entry &x);
};

2.三叉链表存储:
这里写图片描述

遍历二叉树

1. 先序遍历(DLR)
递归过程为:若二叉树为空,遍历结束。否则,
⑴访问根结点;
⑵先序遍历根结点的左子树;
⑶先序遍历根结点的右子树。

void PreOrder(BiTree bt) // 先序遍历二叉树bt
{ 
    if (bt==NULL) return;// 递归调用的结束条件
    Visite(bt->data); // 访问结点的数据域
    PreOrder(bt->lchild);// 先序递归遍历bt的左子树
    PreOrder(bt->rchild); // 先序递归遍历bt的右子树
}

2. 中序遍历(LDR)
递归过程为:若二叉树为空,遍历结束。否则,
⑴中序遍历根结点的左子树;
⑵访问根结点;
⑶中序遍历根结点的右子树。

void InOrder(BiTree bt) // 中序遍历二叉树bt
{ 
    if (bt==NULL) return; // 递归调用的结束条件
    InOrder(bt->lchild); // 中序递归遍历bt的左子树
    Visite(bt->data); // 访问结点的数据域
    InOrder(bt->rchild); // 中序递归遍历bt的右子树
}

3. 后序遍历(LRD)
递归过程为:若二叉树为空,遍历结束。否则,
⑴后序遍历根结点的左子树;
⑵后序遍历根结点的右子树。
⑶访问根结点;

void PostOrder(BiTree bt) // 后序遍历二叉树bt
{ 
    if (bt==NULL) return; // 递归调用的结束条件
    PostOrder(bt->lchild); // 后序递归遍历bt的左子树
    PostOrder(bt->rchild); // 后序递归遍历bt的右子树
    Visite(bt->data); // 访问结点的数据域
}

4.层次遍历
从二叉树的第一层(根结点)开始,从上至下逐层遍历,在同一层中,则按从左到右的顺序对结点逐个访问。

在进行层次遍历时,可设置一个队列结构,遍历从二叉树的根结点开始,首先将根结点指针入队列,然后从队头取出一个元素,每取一个元素,执行下面两个操作:
⑴ 访问该元素所指结点;
⑵ 若该元素所指结点的左、右孩子结点非空,则将该元素所指结点的左孩子指针和右孩子指针顺序入队。
此过程不断进行,当队列为空时,二叉树的层次遍历结束。

void LevelOrder(BiTree bt) // 层次遍历二叉树bt
{ 
    BiTree Queue[MaxNode];
    int front,rear;
    if (bt==NULL) return;
    front=-1; rear=0; queue[rear]=bt;
    while(front!=rear)
    { 
        front++;
        Visite(queue[front]->data); // 访问队首结点的数据域
        if (queue[front]->lchild!=NULL) // 将队首结点的左孩子结点入队列
        { 
            rear++;
            queue[rear]=queue[front]->lchild;
        }
        if (queue[front]->rchild!=NULL) //将队首结点的右孩子结点入队列
        { 
            rear++;
            queue[rear]=queue[front]->rchild;
        }
    }
}
Uncertainty-Aware Mean Teacher(UA-MT) 本文提出了一种新的基于不确定性的半监督学习框架(UA-MT),通过额外利用未标记的数据从3D MR图像中分割左心房。具体地说,本文建立了一个教师模型和一个学生模型,学生模型通过最小化标注数据上的分割监督损失和所有输入数据上的与教师模型预测输出的一致性损失进行优化。如果没有未标记输入中的注释,教师模型的预测目标可能不可靠且有噪声。:在估计不确定性 U 的指导下,我们过滤掉相对不可靠**(高不确定性),整个体积** U 的不确定性**是 {u} ∈ RH×W ×D。过滤掉高不确定性的,也就是熵大于某个值的。 阅读详情

相关推荐

STC8G1K08A的10位PWM避坑指南:为什么你的占空比调节总失效?(附寄存器操作时序图)

本文深入剖析了STC8G1K08A单片机10位PWM功能中占空比调节失效的核心原因,揭示了数据手册未明确指出的寄存器操作时序陷阱。通过对比错误与正确配置的波形,文章指出关键在于更新占空比高2位前需临时关闭PWM输出,并提供了经过验证的安全操作宏与函数库,帮助开发者彻底解决此问题,实现0%-100%的平滑控制。

yyy34的博客 747

数据结构第五章——树和二叉树

数据结构第五章——树和二叉树 树的定义 树(Tree)是n(n>=0)个结点的有限集 若n = 0,称为空树 若n>0,则它满足以下两个条件: 有且仅有一个特定的称为根 其余节点可分为m(m>0)个互不相交的有限集T1,T2,T3,……,Tm,其中每一个集合本身又是一棵树,并称为根的子树(SubTree) 根结点:非空树中无前驱结点的结点 结点的度:结点有用的子树数 树的度:树内各结点度的最大值 树的深度:树的结点的最大层次 有序树 树中结点的各子树从左只有有次序(最左表单为第一个还在

haust_允谦的博客 993

AICodeing:AI驱动的全栈开发革命

作为阿里/字节跳动的资深Java工程师,我们正站在研发效能革命的临界点上。本文将深入探讨如何利用AI技术重构全栈开发流程,实现从需求到上线的量子级提速。

weixin_43290370的博客 1134

完全二叉树的判断(用队列实现层序遍历二叉树)

概念 完全二叉树定义:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。 分析一下完全二叉树的概念,有几个特点: 1.完全二叉树的概念是在层序遍历的基础上建立的,层序遍历就是从上而下一层层遍历,每层是从左到右遍历。 2.如果有一个节点的左孩子不存在,右孩子却存在,那么必定不是完全二叉树 3.当出现某一个节点的左右孩子不是都存在时,那么这个节点层序遍历后面的所有节点,都是

weixin_43923436的博客 774

QML 地图修改插件源码(三),Map在Plugin中设置加载地图类型

常用的地图种类分为交通图,地形图,卫星图等等,在QML的Map(以OSM地图为例)中提供activeMapType属性用于读取当前显示的地图类型(注意:该属性为只读属性,不能用于赋值),QML中地图的加载寻找根据瓦片的文件名进行查找,例如名为"osm_100-l-5-2-2-3.png"的瓦片,其中5代表了该地图的类型

zjgo007的专栏 3164

生信入门(六)——单细胞分析(Seurat)

生信入门(六)——单细胞分析(Seurat) 文章目录生信入门(六)——单细胞分析(Seurat)一、数据导入1、数据来源2、数据导入二、标准预处理1、QC和选择细胞进行进一步分析2、规范化数据3、识别高度可变的特征(特征选择)4、缩放数据三、主成分分析(PCA)1、线性降维2、确定数据集的“维度”四、聚类细胞五、非线性降维(UMAP/tSNE)六、寻找差异表达的特征(簇生物标志物) 一、数据导入 1、数据来源 点击此处下载数据 数据说明:分析10X Genomics提供的外周血单细胞(PBMC)数据集,有

羊羊的博客 6万+

NC60 判断一棵二叉树是否为搜索二叉树和完全二叉树

NC60 判断一棵二叉树是否为搜索二叉树和完全二叉树 描述 给定一棵二叉树,已知其中的节点没有重复值,请判断该二叉树是否为搜索二叉树和完全二叉树。 示例1 输入: {2,1,3} 复制 返回值: [true,true] import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */ public class

caomengying的博客 237

OmniDrive(3):逐行代码详解

模型效果: 端到端联合规划与推理 接下来,简单介绍下训练的配置 1.1 模型配置 模型基于sparse query based的3D Bev感知框架StreamPetr ,用query来编码动态目标(如车辆、行人)和静态地图元素(如车道线)。(1) tran、test和val数据配置 指定真值的文件路径: ann_file 指定输出处理的pipeline: 训练使用, test 和val使用 指定是否需要时序训练seq_mode (2)数据处理pipeline 自定义的Dataset 通过类实现,训

@bangbang的博客 719

树|归纳&总结

树|归纳&总结普通二叉树 普通二叉树 平衡二叉树 完全二叉树 二叉搜索树 多叉搜索树 红黑树 自平衡二叉搜索树(AVL) 前缀树 线段树

legendaryhaha的博客 691

基于YOLOv8的人群聚集检测系统:含UI界面设计与数据集应用

人群聚集检测是智慧城市、公共安全和疫情防控等领域的重要任务。本文结合YOLOv8最新目标检测技术,设计并实现了一个高效的人群聚集检测系统,支持可视化UI界面操作,方便用户实时检测和分析视频中的人群密度。本文详细介绍了系统设计思路、使用的数据集、YOLOv8模型训练和推理过程,以及UI界面的开发与整合。最后通过实验验证了该系统的实用性和性能表现。更灵活的模型架构强化的特征融合网络(PAN++)自动混合精度训练支持支持多任务学习(目标检测+分类+分割)预训练模型丰富,适应多种应用场景。

YOLO 433

model_optimizer将pi05端到端延时进一步优化到68.13ms了

目前在保持灵活性和性能之间找到一个较好的平衡。vit, llm仍然使用onnx->trt_engine的路径,量化可以通过https://github.com/NVIDIA/Model-Optimizer.git支持。同时支持通过cutedsl手写算子进行进一步优化denoise因为步数多,kernel launch多,因此完全通过手写融合算子实现,将所有steps进行一次大的cuda graph capture.

happyAnger6的专栏 59

完全二叉树

一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。 1、具有n个结点的完全二叉树的深度: [log2k]+1(注:[ ]表示向下取整) 2、如果对一棵有n个结点的完全二叉树的结点按层序编号, 则对任一结点i (1≤i≤n) 有: 如果i=1, 则结点i...

zhmq_top的博客 344

学Simulink——基于Simulink的扰动观测器(DOB)补偿坡道重力分量

(质量5kg,坡度30°,目标速度1m/s)为例,基于Simulink搭建“DOB+PI”复合控制仿真平台,从系统建模、DOB算法推导、离散化实现到Simulink模块搭建,提供模块化模型、核心代码及参数整定表,帮助工程师彻底解决重力等恒值扰动引起的稳态误差问题。采用双线性变换(Tustin): s=Ts​2​z+1z−1​,其中 Ts​为控制周期。模块相加(注意符号:ufinal​=upi​−ucomp​或 upi​+ucomp​,取决于扰动定义方向,此处假设重力为正,控制力需反向抵消,故为减)。

MHD0815的博客 69

数据结构之树

本篇只涉及树的概念范围和应考思路,不涉及具体结构或算法的实现与思考 1.树 在计算器科学中,树(英语:tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: ①每个节点有零个或多个子节...

lishinho的博客 6万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【数据结构】数据结构中常用的树

声明:本文汇总了数据结构中一些常用的树,主要内容来自《数据结构(严蔚敏版)》和《算法导论》这两本教材。本文主要归纳出数据结构中常见的树的概念与简单的性质,并未给出具体的操作,如插入、删除、查找等。1、树的定义首先给出树的相关定义:树(tree)是包含n(n>0)个结点的有穷集,其中: 1)每个元素称为结点(node); 2)有一个特定的结点被称为根结点或树根(root); 3)除根结点之外的其

长相忆兮长相忆的专栏 2万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【数据结构】树的认识

正在二叉树的路上前进

adcxhw的博客 1773

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

数据结构——树的概述

引言 对于大量的输入数据,链表的线性访问时间太慢,不宜使用。本篇讨论一种简单的数据结构——树,它大部分操作的运行时间平均为O(logN)O(logN)O(logN)。数据结构中有很多树的结构,其中包括二叉树、二叉搜索树、2-3树、红黑树等等。 基本概念 树(tree)是一些节点的集合。该集合可以是空集,若不是空集,则树由称为根(root)r的节点以及0个或 多个非空的子树组成。 每颗子树的根就做根...

日积月累,天道酬勤 3164

数据结构——树

树是由 n(n≥0)个节点组成的有限集合。当 n=0 时,称为空树;在任意一棵非空树中,有且仅有一个特定的称为根(Root)的节点,当 n>1 时,其余节点可分为 m(m>0)个互不相交的有限集 T1、T2、……、Tm,其中每个集合本身又是一棵树,并且称为根的子树。

m0_61261153的博客 1766

树——数据结构

树、数据结构、树的定义、树的概念、树的应用、结点

b19839356939的博客 2052

【数据结构】树

树是一种非线性的数据结构,它由nnnn≥0n\geq0n≥0)个节点组成的有限集合。当n0n = 0n0时,被称为空树;当n0n > 0n0时,存在一个特定的节点作为根节点,其余节点可以划分成mmmm≥0m\geq0m≥0)个互不相交的有限集合,并且每个这样的集合本身也是一棵树,称作根节点的子树。

Guiat的博客 1317

【数据结构】树的定义

在计算机科学中,树(Tree)是一种重要的基础数据结构,广泛应用于许多领域,如文件系统的目录结构、数据库的索引、编译器的语法树、人工智能的决策树等。理解树的基本概念和术语,对于学习计算机科学及其相关技术具有重要的意义。本篇博客将通过清晰的定义和图示,带领大家逐步了解树的基础知识,适合初学者进行学习和掌握。

XuanRan的博客 8397

【Java数据结构】树

java集合框架:树

2303_77535762的博客 1987

数据结构——B-树、B+树、B*树

在之前,我们已经学习了很多的数据结构,当我们处理海量数据时,选择合适的数据结构变得至关重要,对于不同的数据结构它们的搜索效率也存在着很大的差异。如下种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(log⁡2N)二叉搜索树无要求O(N)二叉平衡树(AVL树和红黑树)无要求O(log⁡2N)哈希无要求O(1)以上结构适合用于数据量相对不是很大,能够一次性存放在内存中,进行数据查找的场景。

学习日记 4409
上一篇: Lesson 14: SDK文档:Tutorial02 Rendering a Triangle分析
下一篇: Lesson 13: SDK文档:Tutorial 1 Direct3D 11 Basics分析
Nim的辙迹
博客等级 码龄10年 17粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值