数据结构
数据结构
1.树
定义:
树(Tree)是n个(n>=0)个结点的有限集。
n=0时称为空树。
在任意一颗非空树中:
(1) 有且仅有一个特定的称为根(root)的的节点
(2) 当n>1时,除根节点外,其余节点可分为m(m>0)个互不相交的有限集(T1,T2,,,,Tm),其中每个集合本身又是一颗树,称为根的子树
对于树的定义还需要注意两点:
1.n>0时跟根节点时唯一的,不可能存在多个根节点
2.m>0时,子树的个数没有限制,但是他们一定是互不相交的
树的度
结点拥有的子树称为结点的度(Degree),度为0的结点称为叶结点,度不为0的结点称为分支结点,除根节点外,分支结点也被称为内部结点
结点的子树的根称为该结点的孩子(Child),相应地,该结点称为孩子的双亲(Parent),同一个双亲的孩子直接互称为兄弟(Slibing)。结点的祖先是从根到该结点所经分支上的所有结点。所以对于H来说,D,B,A都是他的祖先,反之则为子孙。B的子孙有D,G,H,I。
结点的层次
结点的层次(Level)从根开始定义起,根为第一层,根的孩子为第二层。其中双亲在同一层的结点互为堂兄弟。显然图中DEF都是堂兄弟,而GHI与J也是堂兄弟。树中结点的最大层次称为树的圣都(Depth)活高度,当前数的深度为4.
注:
若将树中的每个结点的各子树看成是从左到右有次序的(既不能互换),则称该树为有序树(OrderedTree);否则称为无序树(UnorderedTree)。注意:若不特别指明,一般讨论的树都是有序树
2.二叉树
定义:
二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的,分别称为根结点的左子树和右子树组成
斜树
顾名思义,斜树一定要是斜的,但是往哪斜还是有讲究,所有的结点都只有左子树的二叉树叫左斜树。反之交右斜树
斜树有很明显的特点,就是每一层都只有一个结点,结点的个数与二叉树的深度相同。
线性表结构就可以理解为是树的一种极其特殊的表现形式。
特点:
1.任意结点的左结点不为空时,左节点的值小于根结点值
2.右结点不为空时,右结点的值大于根结点值
依次存入数据,如果是递增或是递减,就会出现斜树,既退化成链表的形式(链表 ==> 查询慢)
满二叉树
在一颗二叉树中。如果所有分支结点都存在于左子树和右子树,并且所有叶子都在同一层上,这样的树称为满二叉树。
满二叉树的特点有:
- 叶子只能出现在最下一层。出现在其它层就不可能达成平衡。
- 非叶子结点的度一定是2。
- 在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多。
完全二叉树
-
对一颗具有n个结点的二叉树按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这颗二叉树称为完全二叉树。
-
这是一种有些理解难度的特殊二叉树。首先从字面上要区分,“完全和”满“的差异,满二叉树一定是完全二叉树,反之不一定成立。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类