【数据结构】_树与二叉树

news/2025/2/9 8:30:18/

目录

1.树的概念和结构

1.1 树的概念

 1.2 树的相关概念

 1.3 树的表示

2. 二叉树的概念与结构

2.1 概念

2.2 特殊二叉树

 2.3 二叉树的性质

2.4 二叉树的存储结构

第一种:顺序存储结构

第二种:链式存储结构


1.树的概念和结构

1.1 树的概念

树是一种非线性数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合,把它称为树是因为它看起来像一棵倒挂的树,根在上,枝叶在下。

1、根节点是一个没有前驱结点的特殊结点;

2、除根节点外,其叶结点被分为M(M>0)个互不相交的集合T1,T2,T3...Tm,其中每一个集合Ti(1<=i<=m)又是一棵结构与树类型相似的子树,每棵树的根节点有且仅有一个前驱,可以有0个或多个后继;

3、树是递归定义的:任何一棵树都是由根和N棵子树构成的(N≥0);

4、对于任意一棵树,其子树是不相交的;

 1.2 树的相关概念

(1)结点的度:一个结点含有的子树的个数,如A结点的度为6;

(2)叶结点或终端结点:度为0的结点,如H、I、P、Q、K、L、M、N;

(3)非终端结点或分支结点:度不为0的结点,如:D、E、F、G、J;

(4)双亲结点或父节点:含有子结点的结点,称该结点为其子结点的父结点,如A是B的父结点;

(5)孩子结点或子结点:一个结点含有的子树的根节点称为该结点的子结点,如B是A的子结点;

(6)兄弟结点:具有相同父结点的结点,如B和C是兄弟结点;

(7)树的度:一棵树中最大的结点的度称为树的度,如上图树的度为6;

(8)结点的层次:从根开始定义,根为第一层,根的子结点为第二层,以此类推;

(9)树的高度或深度:树中结点的最大层次,如上图树的高度或深度为4;

       (空树高度为0,只有一个结点的树高度为1)

(10)堂兄弟结点:双亲在同一层的结点称为堂兄弟,如H和I互为堂兄弟结点;

(11)结点的祖先:从根到该结点所经分支上的所有结点,如A是所有结点的祖先;

(12)子孙:以某节点为根的子树中任一结点都成为该结点的子孙,如所有节点都是A的子孙;

(13)森林:由m(m>0)棵互不相交的树的集合称为森林;

 1.3 树的表示

树的存储相较于线性表要复杂得多,既要存储结点的值,也要存储结点与结点之间的关系

树有很多种表达方式,如双亲表示法、孩子表示法、孩子双亲表示法。

表达树最常用的结构是左孩子右兄弟表示法

代码表示如下:

typedef int DataType;
struct TreeNode
{struct TreeNode* firstchild; //指向第一个孩子结点struct TreeNode* pnextbrother; //指向下一个兄弟结点DataType data; //结点中的数据域
};
//注意此处的兄弟指的是亲兄弟而非堂兄弟,即此处指向的兄弟有相同的祖先

2. 二叉树的概念与结构

2.1 概念

1、一个二叉树的结点是一个有限集合,该集合:

① 或者为空 ② 有一个根节点加上两个别称为左子树和右子树的二叉树组成;

2、特点:

(1)不存在度大于2的结点;

(2)二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

3、任意一种二叉树都是由以下五种情况复合而成:

①空树 ②只有根节点 ③只存在左子树 ④只存在右子树 ⑤左右子树均存在;

2.2 特殊二叉树

(1)满二叉树

每层节点数都是最大值的二叉树,即满足层数为k,第k层有2^(k-1)个结点,k=0、1、2...结点总数是2^k-1的二叉树就是完全二叉树。

(2)完全二叉树

对于深度为k的二叉树,前k-1层的结点都是满的,最后一层不满但满足存在的结点是从左向右是连续的

 2.3 二叉树的性质

(1)若规定根结点层数为1,则一棵非空二叉树的第i层上最多有2^(i-1)个结点

(2)若规定根结点层数为1,则深度为h的二叉树的最大结点数是2^k-1

(3)对任何一个二叉树,如果度为0的结点个数为n0,度为2的分支节点个数为n2,则有n0=n2+1;

(4)若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=log2(n+1)(以2为底);

2.4 二叉树的存储结构

二叉树的存储结构有顺序存储结构和链式存储结构两种;

第一种:顺序存储结构

1、一般使用数组存储只适合表示完全二叉树或满二叉树,若是一般二叉树会存在很多空间浪费;

在现实使用中,只有完全二叉树才会使用数组来存储;

2、二叉树的顺序存储在物理上是一个数组,在逻辑上是一个二叉树

3、同时顺序存储可以根据下标计算结点父子关系:

知父求子:leftchild=parent*2+1,leftchild=parent*2+2;

知子求父:(parent-1)/2;

第二种:链式存储结构

二叉树的链式存储结构是指用链来指示元素的逻辑关系,通常方法是链表结点由三个域组成:

数据域、左指针域、右指针域,左右指针分别指向左孩子和右孩子的链结点。

二叉树的链式存储有两种结构:二叉链和三叉链:


http://www.ppmy.cn/news/1570539.html

相关文章

软件工程导论三级项目报告--《软件工程》课程网站

《软件工程》课程网站 摘要 本文详细介绍了《软件工程》课程网站的设计与实现方案&#xff0c;包括可行性分析、需求分析、总体设计、详细设计、测试用例。首先&#xff0c;通过可行性分析从各方面确认了该工程的可实现性&#xff0c;接着需求分析明确了系统的目标用户群和功能…

java 读取sq3所有表数据到objectNode

1.实现效果&#xff1a;将sq3中所有表的所有字段读到objectNode 对象中&#xff0c;兼容后期表字段增删情况&#xff0c;数据组织形式如下图所示&#xff1a; 代码截图&#xff1a; 代码如下&#xff1a; package com.xxx.check.util;import java.sql.*; import java.util.Arr…

我个人对DeepSeek一些评价

DeepSeek是一款备受关注的国产AI模型&#xff0c;以下是我个人对其的详细评价&#xff1a; 一、核心优势 强大的推理能力&#xff1a;DeepSeek能够准确解答复杂的数学问题&#xff0c;并展示完整的思考过程&#xff0c;像一个优秀的老师在给用户讲解。这种推理能力在AI模型中…

机器学习数学基础:19.线性相关与线性无关

一、线性相关与线性无关的定义 &#xff08;一&#xff09;线性相关 想象我们有一组向量&#xff0c;就好比是一群有着不同“力量”和“方向”的小伙伴。给定的向量组 α ⃗ 1 , α ⃗ 2 , ⋯ , α ⃗ m \vec{\alpha}_1, \vec{\alpha}_2, \cdots, \vec{\alpha}_m α 1​,α 2…

测试中的第一性原理:回归本质的质量思维革命

在软件工程领域&#xff0c;测试活动常被惯性思维和经验主义所主导——测试用例库无限膨胀、自动化脚本维护成本居高不下、测试策略与业务目标渐行渐远。要突破这种困境&#xff0c;第一性原理&#xff08;First Principles Thinking&#xff09;提供了独特的解题视角&#xff…

2025蓝桥杯JAVA编程题练习Day3

1.黛玉泡茶【算法赛】 问题描述 话说林黛玉闲来无事&#xff0c;打算在潇湘馆摆个茶局&#xff0c;邀上宝钗、探春她们一起品茗赏花。黛玉素来讲究&#xff0c;用的茶杯也各有不同&#xff0c;大的小的&#xff0c;高的矮的&#xff0c;煞是好看。这不&#xff0c;她从柜子里…

连续型变量的 PSI-群体稳定性指标计算

PSI-群体稳定性指标(连续型) PSI(Population Stability Index:群体稳定性指标) 在风控中&#xff0c;一套模型上线后往往需要很久&#xff08;通常一年以上&#xff09;&#xff0c;如果模型不稳定会直接影响决策的合理性&#xff0c;所以稳定性压倒一切,PSI反应了验证样本在各…

亚博microros小车-原生ubuntu支持系列:24 巡线驾驶

这篇跟之前的颜色识别类似&#xff0c;亚博microros小车-原生ubuntu支持系列&#xff1a;21 颜色追踪-CSDN博客 1、程序功能说明 程序启动后&#xff0c;调整摄像头的俯仰角&#xff0c;把摄像头往下掰动&#xff0c;使得摄像头可以看到线&#xff0c;然后点击图像窗口&#…