首页 > 其他分享 >数据结构—《二叉树的定义与特性》

数据结构—《二叉树的定义与特性》

时间:2025-01-14 15:02:10浏览次数:3  
标签:左子 结点 定义 右子 二叉树 编号 数据结构 顺序存储

目录

1.二叉树的定义

2.特殊的二叉树

1)满二叉树

2)完全二叉树

3)二叉排序树。

4)平衡二又树。

5)正则二文树

3.二叉树的性质

4.二叉树的存储结构

1)顺序存储结构

2)链式存储结构


1.二叉树的定义

二叉树是一种特殊的树形结构,其特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是n(n>0)个结点的有限集合:(1)n=0,为空二叉树。(2)或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。

2.特殊的二叉树

1)满二叉树

一棵高度为h,且有 2^h-1个结点的二叉树称为满二叉树,即二叉树中的每层都含有最多的结点。满二叉树的叶结点都集中在二叉树的最下一层,并且除叶结点之外的每个结点度数均为2。

可以对满二叉树按层序编号:约定编号从根结点(根结点编号为1)起,自上而下,自左向右。这样,每个结点对应一个编号,对于编号为i的结点,若有双亲,则其双亲为[i/2](向下取整)若有左孩子,则左孩子为2i;若有右孩子,则右孩子为2i+1。

即给出高度h后,每层必须填满,一棵满二叉树如下图:

2)完全二叉树

高度为h、有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树中编号为1~n 的结点一一对应时,称为完全二又树。

① 若 i≤[n/2](向下取整),则结点i为分支结点,否则为叶结点。

②叶结点只可能在层次最大的两层上出现。对于最大层次中的叶结点,都依次排列在该层最左边的位置上。

③ 若有度为1的结点,则最多只可能有一个,且该结点只有左孩子而无右孩子。

④按层序编号后,一旦出现某结点(编号为i)为叶结点或只有左孩子,则编号大于i的结点均为叶结点。

⑤ 若n为奇数,则每个分支结点都有左孩子和右孩子;若n为偶数,则编号最大的分支结点(编号为n/2)只有左孩子,没有右孩子,其余分支结点左、右孩子都有。

即每层不需必须填满,但前面的序号结点结构必需与满二叉树的相同。

3)二叉排序树。

左子树上所有结点的关键字均小于根结点的关键字,右子树上所有结点的关键字均大于根结点的关键字;左子树和右子树又各是一棵二叉排序树。

给出一组数据50 54 21 84 10 31 16 32 9 51 ,挨个插入,这时候没有树满不满之分,得到二叉排序树:

也可以得到这么一棵二叉排序树,只有右子树,没有左子树:

 

4)平衡二又树。

树中任意一个结点的左子树和右子树的高度之差的绝对值不超过1。

下面是一棵平衡二叉树:

当把6结点删除,3结点左右子树高度之差绝对值为2,破环了平衡,不再是一棵平衡二叉树。

5)正则二文树

树中每个分支结点都有2个孩子,即树中只有度为0或2的结点。

3.二叉树的性质

1)非空二叉树上的叶结点数等于度为2的结点数加1,即n0=n+1。

2)非空二叉树的第k层最多有2^k-1个结点(k≥1)。

3)高度为h的二叉树至多有 2^h-1个结点(h≥1)。

4.二叉树的存储结构

1)顺序存储结构

二叉树的顺序存储是指用一组连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为i的结点元素存储在一维数组下标为i-1的分量中。

依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映结点之间的逻辑关系,这样既能最大可能地节省存储空间,又能利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。

完全二叉树顺序存储结构:

一般二叉树的顺序存储结构:

2)链式存储结构

由于顺序存储的空间利用率较低,因此二叉树一般都采用链式存储结构,用链表结点来存储二叉树中的每个结点。在二叉树中,结点结构通常包括若干数据域和若干指针域,二叉链表至少包含3个域:数据域 data、左指针域 1child 和右指针域rchild。

 

 

 

标签:左子,结点,定义,右子,二叉树,编号,数据结构,顺序存储
From: https://blog.csdn.net/m0_74748236/article/details/145137194

相关文章

  • Oracle自定义函数:生成汉字首字母拼音码的函数、MD5
    1 生成汉字拼音码的函数使用方法:select用户名.函数名(需要获取首字母拼音码的字段名)from用户名.表名;selectoracle_user1.fgetpy(t.name)fromoracle_user1.studentt;函数定义:createorreplacefunctionfgetpy(v_strvarchar2)returnvarchar2asv_strleni......
  • 知识图谱与大模型融合,重新定义设备故障诊断
    在现代工业与制造领域,设备运行的稳定性和可靠性对生产效率和安全至关重要。然而,随着设备的复杂性日益提升,传统的故障诊断方法面临以下挑战:1.复杂的故障模式:设备的多部件、多工况、多故障模式使传统方法难以全面覆盖。2.数据爆炸与不均:海量的传感器数据与日志记录需要高效处......
  • Origin 自定义公式拟合
    非线性拟合选中数据-绘图-分析-拟合-非线性曲线拟合-打开对话框-新建函数-函数命名-输入函数表达式,如y=a*x^2,即可。若公式中涉及到复数,则使用ImReal()取实部,Imaginary()取虚部,Imsqrt()取开方。如色散方程取实部,即色散部分进行拟合,则相应的Origin拟合......
  • 数据结构------树
    前言:前面我们学习了栈和队列。今天我们来学习一种新的数据结构---------树。首先我们来了解一下树的概念。1.树的概念与结构前面我们学习过的顺序表,栈都是一种顺序结构。链表,队列是链式结构。今天学习的树也是一种链式结构。它是由n(n>=0)个有限节点组成一个具有层次关系......
  • 数据结构之链式二叉树
    前言:前面我们学习了树相关的概念及堆的实现,今天来看看二叉树的实现。正式实现二叉树前,我们先了解一些基础知识。对于二叉树基础知识不清楚的可以观看数据结构------树这篇文章,回顾一下知识,有助于理解二叉树。二叉树的遍历方式都有哪些呢?.前序遍历:按照根节点,左节点,右节......
  • 【轻松掌握数据结构与算法】哈希(Hashing)
    什么是哈希?哈希是一种将任意长度的数据转换为固定长度的数据的技术。这个固定长度的数据通常被称为哈希值或哈希码。哈希函数是实现这一转换的关键,它接受任意长度的输入,并产生一个固定长度的输出。为什么使用哈希?哈希的主要用途之一是快速查找数据。通过哈希函数,我们可以将......
  • 鸿蒙开发 - 自定义组件 和 组件通信的方法
    自定义组件的基本结构@Entry@ComponentstructMyComponent{build(){//...}}build()函数build()函数用于描述组件的UI界面,自定义组件必须定义build()函数build(){Column(){Text('测试')Button('点击')}}struct关键字strcut用来......
  • 界面控件 DevExpress v24.2 新版亮点 - 自定义和扩展 AI 驱动的扩展
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress今年第一个重要版本v23.1正式发布,该版本拥有众多新产品和数十个具有高影响力......
  • 代码随想录:最大二叉树
    白送/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr),right(nullptr){}......
  • 代码随想录:从中序与后序遍历序列构造二叉树
    /**Definitionforabinarytreenode.structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode():val(0),left(nullptr),right(nullptr){}TreeNode(intx):val(x),left(nullptr),right(nullptr){}TreeNode(intx,TreeNo......