1.定义(知识大纲)
知识总览:
定义;二叉树是一种特殊的树形结构,其特点是每个结点至多只有两颗字树(即二叉树种不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。
细小知识点:
区分二叉树和度为二的树(我之前也没有认真区分,是根据看书,发现的):
度为2的树至少有3个结点,而二叉树可以为空。
度为2的有序树的孩子的左右次序是相对于另一个孩子而言,某一个结点只有一个孩子,则这个孩子就无须区分其左右次序。而二叉树无论孩子数是否为2,均需确定其左右次序,即二叉树的结点次序不是相对于另一个结点而言的,而是确定的。
注:这个区分有点无聊,看看就行。
2.二叉树的种类
- 二叉树:每个结点的度均不大于2的有序树。
- 斜树:所有结点都只有左子树的二叉树叫左斜树,所有结点都只有右子树的二叉树叫右斜树。统称为斜树。
- 满二叉树:所有分支结点(非终端结点)都有左右子树,且所有叶子结点(终端结点)在同一层次的二叉树。
- 完全二叉树:对于一棵具有n个结点的二叉树按层序编号,如果编号为i(1≤i≤n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵树为完全二叉树。 (直观解释:除了最后一层外其他层都是满二叉树的二叉树,且最后一层的结点从左往右按顺序分布。
对应的性质:
完全二叉树
1.只有最后两层可能有叶子结点。
2.最多只有一个度为1的结点。
注:这两个性质经常考,特别是完全二叉树度为1的可能有,可能没有,这时候就与度的最大和最小值挂钩。
二叉排序树
平衡二叉树
后面几个,在以后的章节会重点提及的,虽然在二叉树这个章节看上去没有怎么提及,后面会呼应的,可以后面重点学习,这一章,知道这个概念就可以了。
3.二叉树的性质
上面是文字直接说明,下面是对应的图片。
图片说明:(复习的时候先看上图,上图的文字叙述的有点模糊就看下面图片,不模糊就直接过,节省时间)。
完全二叉树考察:
4.二叉树的存储结构
二叉树分为顺序存储和链式存储
注:这这个知识点,直接会看视频是最高效的复习策略。我一轮的时候也是只把概念弄清,可能深度不够,二轮要把整个过程弄清。
定义:
- 顺序储存结构: 用数组自上而下,自左至右储存完全二叉树上的结点元素,0号单元储存根结点。一般二叉树数组中一些位置填0表示不存在此结点,会占用不必要空间。故数组一般只用来存储完全二叉树。
- 链式储存结构:由二叉树的定义可知,链表中的结点数据项包括数据域和左、右指针域。链表的头指针指向根结点,这样的链表又称为二叉链表。如果需要方便找一个结点的父结点,可以定义一个三叉链表额外储存结点的父结点指针域。
注:特别是哪些适用于顺序存储,哪些适用于链式存储,自己这方面一轮的时候没有注意,导致错题,比较多。
考题:顺序存储 ,又要满足任意性,就必须以满二叉树计算。
5.二叉树的遍历
注(复习策略):知识点就定义,很多是通过题型的(条件),进行改变。
对于线性表遍历的顺序是一条直线,对于二叉树遍历需要遵循某种关系。遍历后其实就是把树中的结点变成某种有意义的线性序列,用于程序实现。
遍历二叉树:按某条搜索路径巡访树中的每个结点,使每个结点均只被访问一次。
- 前序遍历:若二叉树为空,则空操作1.访问根结点 2.前序遍历左子树 3.前序遍历右子树
- 中序遍历:若二叉树为空,则空操作1.中序遍历左子树 2.访问根结点 3.中序遍历右子树
- 后序遍历:若二叉树为空,则空操作1.后序遍历左子树 2.后序遍历右子树 3.访问根结点
- 层序遍历:若二叉树为空,则空操作,从树的第一层从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问
注:递归和非递归在一轮的时候,没有很仔细的区别和实践,在二轮的时候,一定要注意这个知识点,将之前遗漏的捞一下。
常考的结论:
注(考题):喜欢考只只给前序和后序推有那几种可能。
里面算最难的几个题目(与栈结合)