【思维导图】数据结构与算法-二叉树基础
数据结构应用-二叉树
![数据结构应用-二叉树](https://img.taocdn.com/s3/m/0f2f586d5bcfa1c7aa00b52acfc789eb172d9e22.png)
数据结构应⽤-⼆叉树1.表达式树描述:表达式树的叶节点为操作数,其他节点为运算符。
对表达式式树采⽤不同的遍历策略可以分别得到前中后缀三种表达式。
先序遍历:前缀表达式(不常⽤)中序遍历:中缀表达式后序遍历:后缀表达式构造表达式树:把后缀表达式转化为表达式树(中缀转后缀已经在栈的应⽤中提到过),本质上还是借助了栈。
类似后缀表达式求值,从头开始逐字符读⼊表达式,遇到操作数则建⽴⼀个单节点树,将其指针压⼊栈中,当遇到运算符时,将栈顶的两个指针弹出并作为当前运算符的⼦节点构成⼀棵⼆叉树,将该树的指针压⼊栈中。
读到表达式末尾时,留在栈中的只剩下指向最终的表达式树的指针。
2.编码树编码:将信息转化为⼆进制码传输的过程就是编码。
解码:将接受到的⼆进制码恢复为原信息就是解码。
编码表:字符集中的任意字符都能在编码表中找到唯⼀对应的⼆进制串。
字符集到编码表是单射。
解码歧义:编码可以做到⼀⼀对应,解码却未必。
⽐如,规定S->11,M->111,那么现有⼆进制串“111111”,这个⼆进制串应该解码为SSS还是MM呢?这就产⽣了歧义。
产⽣歧义的根源在于,编码表中的某些编码,是其他编码的前缀。
在上例中,S对应的11就是M对应的111的前缀。
前缀⽆歧义编码(PFC):既然知道了产⽣歧义的根源,就可以针对此根源来避免歧义。
避免歧义的本质要求就是,保证字符集中的每⼀个字符所对应的⼆进制串不是编码表中其他任何⼆进制串的前缀。
⼆叉编码树:⽤⼆叉树来描述编码⽅案。
我们知道从⼆叉树的根节点到任⼀其他节点的通路是唯⼀的,那么如果,我们使每⼀个节点之间的通路都表⽰⼆进制码0和1(左通路0,右通路1),这样从根节点出发到某节点的通路就变成了⼀个唯⼀的⼆进制串。
↑⼀棵普通的⼆叉编码树,来⾃《数据结构(C++语⾔版)》邓俊辉PFC编码树:由上图可以清晰地看出,S所对应的⼆进制码之所以会成为M(所对应的⼆进制码)的前缀,是因为S是M的⼦节点。
二叉树知识点总结
![二叉树知识点总结](https://img.taocdn.com/s3/m/690d45476d85ec3a87c24028915f804d2b1687d6.png)
二叉树知识点总结1. 二叉树的性质1.1 二叉树的性质一:二叉树的深度二叉树的深度是指从根节点到叶子节点的最长路径长度。
对于一个空树而言,它的深度为0;对于只有一个根节点的树而言,它的深度为1。
根据定义可知,深度为k的二叉树中,叶子节点的深度值为k。
由此可知,二叉树的深度为所有叶子节点深度的最大值。
1.2 二叉树的性质二:二叉树的高度二叉树的高度是指从根节点到叶子节点的最短路径长度。
对于一个空树而言,它的高度为0;对于只有一个根节点的树而言,它的高度为1。
由此可知,二叉树的高度总是比深度大一。
1.3 二叉树的性质三:二叉树的节点数量对于一个深度为k的二叉树而言,它最多包含2^k - 1个节点。
而对于一个拥有n个节点的二叉树而言,它的深度最多为log2(n+1)。
1.4 二叉树的性质四:满二叉树满二叉树是一种特殊类型的二叉树,它的每个节点要么是叶子节点,要么拥有两个子节点。
满二叉树的性质是:对于深度为k的满二叉树而言,它的节点数量一定是2^k - 1。
1.5 二叉树的性质五:完全二叉树完全二叉树是一种特殊类型的二叉树,它的所有叶子节点都集中在树的最低两层,并且最后一层的叶子节点从左到右依次排列。
对于一个深度为k的完全二叉树而言,它的节点数量一定在2^(k-1)和2^k之间。
2. 二叉树的遍历二叉树的遍历是指按照一定的顺序访问二叉树的所有节点。
二叉树的遍历主要包括前序遍历、中序遍历和后序遍历三种。
2.1 前序遍历(Pre-order traversal)前序遍历的顺序是:根节点 -> 左子树 -> 右子树。
对于一个二叉树而言,前序遍历的结果就是按照“根-左-右”的顺序访问所有节点。
2.2 中序遍历(In-order traversal)中序遍历的顺序是:左子树 -> 根节点 -> 右子树。
对于一个二叉树而言,中序遍历的结果就是按照“左-根-右”的顺序访问所有节点。
2.3 后序遍历(Post-order traversal)后序遍历的顺序是:左子树 -> 右子树 -> 根节点。
数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL
![数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL](https://img.taocdn.com/s3/m/e77c96aef021dd36a32d7375a417866fb84ac038.png)
数据结构与算法系列研究五——树、⼆叉树、三叉树、平衡排序⼆叉树AVL树、⼆叉树、三叉树、平衡排序⼆叉树AVL⼀、树的定义树是计算机算法最重要的⾮线性结构。
树中每个数据元素⾄多有⼀个直接前驱,但可以有多个直接后继。
树是⼀种以分⽀关系定义的层次结构。
a.树是n(≥0)结点组成的有限集合。
{N.沃恩}(树是n(n≥1)个结点组成的有限集合。
{D.E.Knuth})在任意⼀棵⾮空树中:⑴有且仅有⼀个没有前驱的结点----根(root)。
⑵当n>1时,其余结点有且仅有⼀个直接前驱。
⑶所有结点都可以有0个或多个后继。
b. 树是n(n≥0)个结点组成的有限集合。
在任意⼀棵⾮空树中:⑴有⼀个特定的称为根(root)的结点。
⑵当n>1时,其余结点分为m(m≥0)个互不相交的⼦集T1,T2,…,Tm。
每个集合本⾝⼜是⼀棵树,并且称为根的⼦树(subtree)树的固有特性---递归性。
即⾮空树是由若⼲棵⼦树组成,⽽⼦树⼜可以由若⼲棵更⼩的⼦树组成。
树的基本操作1、InitTree(&T) 初始化2、DestroyTree(&T) 撤消树3、CreatTree(&T,F) 按F的定义⽣成树4、ClearTree(&T) 清除5、TreeEmpty(T) 判树空6、TreeDepth(T) 求树的深度7、Root(T) 返回根结点8、Parent(T,x) 返回结点 x 的双亲9、Child(T,x,i) 返回结点 x 的第i 个孩⼦10、InsertChild(&T,&p,i,x) 把 x 插⼊到 P的第i棵⼦树处11、DeleteChild(&T,&p,i) 删除结点P的第i棵⼦树12、traverse(T) 遍历树的结点:包含⼀个数据元素及若⼲指向⼦树的分⽀。
●结点的度: 结点拥有⼦树的数⽬●叶结点: 度为零的结点●分枝结点: 度⾮零的结点●树的度: 树中各结点度的最⼤值●孩⼦: 树中某个结点的⼦树的根●双亲: 结点的直接前驱●兄弟: 同⼀双亲的孩⼦互称兄弟●祖先: 从根结点到某结点j 路径上的所有结点(不包括指定结点)。
基本二叉树知识讲解
![基本二叉树知识讲解](https://img.taocdn.com/s3/m/37d87c2bb4daa58da0114afa.png)
基本二叉树知识讲解一、有关二叉树的学习性质1:二叉树上叶子结点数等于度为2的结点数加1。
性质2:二叉树的第i层上至多有2的i次方减1个结点(i>=1)。
性质3:深度为h的二叉树至多有2的h次方减1个结点。
满二叉树:在一棵二叉树中,当第i层的结点树为2的i次方减1个时,称此层的结点数是满的。
当一棵二叉树中的每一层都满时,称此树为满二叉树。
特性:除叶子结点以外的其他的结点的度皆为2,且叶子结点在同一层上。
深度为h的满二叉树中的结点数为2的h次方减1。
性质4:设含有n个结点的完全二叉树的深度为k,则k=(int)(log2n)+1,即深度k等于log2n的整数部分再加1。
二叉树的存储结构1:顺序存储结构二叉树的顺序存储结构类型定义如下:#define TREEMINSIZE 10typedef struct{BTreeDT(数据类型) *base;int spacesize;BTreeDT nullvalue;}SeqTree;2:链式存储结构(一般的二叉树主要采用链式存储结构通常有二叉链表和三叉链表两种形式)1>二叉链表存储结构二叉链表中的每个结点由data,lchild和rchild三个域组成,定义如下:typedef struct bkbtnode{BTreeDT data;struct bkbtnode *lchild;struct bkbtnode *rchild;}BTNode,*BKBTree;在二叉链表中,查找某结点的孩子很容易实现,但查找某结点的双亲不方便。
一棵喊有n个结点的二叉树采用二叉链表存储时,将有2n-(n-1)=n+1个指针域是空的。
2>三叉链表存储结构typedef struct tkbtnode{BTreeDT data;struct tkbtnode *lchild;struct tkbtnode *rchild;struct tkbtnode *parent;}TKBTNode,*TKBTree;其中,parent域存放该结点双亲的指针。
王道数据结构 第七章 查找思维导图-高清脑图模板
![王道数据结构 第七章 查找思维导图-高清脑图模板](https://img.taocdn.com/s3/m/665fc13c182e453610661ed9ad51f01dc28157c7.png)
每次调整的对象都是“最小不平衡子树”
插入操作
在插入操作,只要将最小不平衡子树调整平衡,则其他祖先结点都会恢复平衡
在A的左孩子的左子树中插入导致不平衡
由于在结点A的左孩子(L)的左子树(L)上插入了新结点,A的平衡因子由1增
至2,导致以A为根的子树失去平衡,需要一次向右的旋转操作。
LL
将A的左孩子B向右上旋转代替A成为根节点 将A结点向右下旋转成为B的右子树的根结点
RR平衡旋转(左单旋转)
而B的原左子树则作为A结点的右子树
在A的左孩子的右子树中插入导致不平衡
由于在结点A的左孩子(L)的右子树(R)上插入了新结点,A的平衡因子由1增
LR
至2,导致以A为根的子树失去平衡,需要两次旋转操作,先左旋转再右旋转。
将A的左孩子B的右子树的根结点C向左上旋转提升至B结点的位置
本质:永远保证 子树0<关键字1<子树1<关键字2<子树2<...
当左兄弟很宽裕时,用当前结点的前驱、前驱的前驱来填补空缺 当右兄弟很宽裕时,用当前结点的后继、后继的后继来填补空缺
兄弟够借。若被删除关键字所在结点删除前的关键字个数低于下限,且与此结点 右(或左)兄弟结点的关键字还很宽裕,则需要调整该结点、右(或左)兄弟结 点及其双亲结点及其双亲结点(父子换位法)
LL平衡旋转(右单旋转)
而B的原右子树则作为A结点的左子树
在A的右孩子的右子树中插入导致不平衡
由于在结点A的右孩子(R)的右子树(R)上插入了新结点,A的平衡因子由-1
减至-2,导致以A为根的子树失去平衡,需要一次向左的旋转操作。
RR
将A的右孩子B向左上旋转代替A成为根节点 将A结点向左下旋转成为B的左子树的根结点
数据结构与算法
![数据结构与算法](https://img.taocdn.com/s3/m/6d3dedecba4cf7ec4afe04a1b0717fd5360cb266.png)
数据结构与算法第一节数据结构及算法概述一、数据结构图、四类基本结构的示意图【要点】 1 .数据元素是数据的基本单位。
2 .数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
3 .4类基本的规律结构:集合、线性结构、树形结构和网状结构。
4 .4种数据存储方式:挨次、链式、索引和散列。
【例题•单选题】(2022年义省信用社聘请考试真题)下列说法不正确的是()OA.数据元素是数据的基本单位B.数据项是数据中不行分割的最小标志单位 C.数据可由若干个数据元素构成D.数据项可由若干个数据元素构成『正确答案』D『答案解析』数据元素是数据的基本单位,在计算机程序中通常被作为一个整体进 行考虑和处理。
一个数据元素可由若干个数据项组成。
数据项是不行分割的、含有独立 意义的最小数据单位。
因此D 选项不正确。
二、算法O ——O ——O ——O ——O ⑹树型结构⑹线性结构 (d)图形结构算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作。
算法的特性:有穷性、确定性、可行性、输入和输出。
【要点】评价算法优劣标准:正确性、可读性、健壮性、高效率与低存储量需求。
其次节线性表线性表是n (n≥0)个数据元素al, a2,…,an组成的有限序列,n=0时称为空表。
非空的线性表,有以下特征:L有且仅有一个开头结点al,没有直接前趋,有且仅有一个直接后继a2。
2.有且仅有一个终结结点an,没有直接后继,有且仅有一个直接前趋a-。
3.其余的内部结点ai (2WiWnT)都有且仅有一个直接前趋a-和一个直接后继3i+ι o线性表的链式存储包括单链表、循环链表和双链表。
head 头结点百结点尾结点【留意】与单链表的插入和删除操作不同的是,在双链表中插入和删除须同时修改两个方向上的指针。
第三节栈和队列一、栈栈是一种“特别的”线性表,这种线性表中的插入和删除运算限定在表的某一端进行。
不含任何数据元素的栈称为空栈。
数据结构树和二叉树知识点总结
![数据结构树和二叉树知识点总结](https://img.taocdn.com/s3/m/d2e0c5d9988fcc22bcd126fff705cc1755275fa4.png)
数据结构树和二叉树知识点总结
1.树的概念:树是一种非线性的数据结构,由节点和边构成,每个节点只能有一个父节点,但可以有多个子节点。
2. 二叉树的概念:二叉树是一种特殊的树结构,每个节点最多只有两个子节点,一个是左子节点,一个是右子节点。
3. 二叉树的遍历:二叉树的遍历分为前序遍历、中序遍历和后序遍历三种方式。
前序遍历是先访问根节点,再访问左子树,最后访问右子树;中序遍历是先访问左子树,再访问根节点,最后访问右子树;后序遍历是先访问左子树,再访问右子树,最后访问根节点。
4. 二叉搜索树:二叉搜索树是一种特殊的二叉树,它满足左子树中所有节点的值均小于根节点的值,右子树中所有节点的值均大于根节点的值。
因此,二叉搜索树的中序遍历是一个有序序列。
5. 平衡二叉树:平衡二叉树是一种特殊的二叉搜索树,它的左子树和右子树的高度差不超过1。
平衡二叉树的插入和删除操作可以保证树的平衡性,从而提高树的查询效率。
6. 堆:堆是一种特殊的树结构,它分为最大堆和最小堆两种。
最大堆的每个节点的值都大于等于其子节点的值,最小堆的每个节点的值都小于等于其子节点的值。
堆常用于排序和优先队列。
7. Trie树:Trie树是一种特殊的树结构,它用于字符串的匹配和检索。
Trie树的每个节点代表一个字符串的前缀,从根节点到叶子节点的路径组成一个完整的字符串。
以上是数据结构树和二叉树的一些基本知识点总结,对于深入学
习数据结构和算法有很大的帮助。
数据结构与算法(共11张PPT)
![数据结构与算法(共11张PPT)](https://img.taocdn.com/s3/m/88bf4b3c2379168884868762caaedd3383c4b5dd.png)
(b)入队3个元素(c)出队3个元素
(b) d, e, b, g入队
利用一组连续的存储单元(一维数组)依次存放从队 在循环队列中进行出队、入队操作时,队首、队尾指
队列示意图
在非空队列里,队首指针始终指向队头元素,而队
(b) d, e, b, g入队
8
Q.rear
a5
a4
Q.front
(d)入队2个元素
a1, a2, … , an
的指修针改 和是队依列先中进元先素出的Q的变.re原化a则情r 进况行。的,如图所示。
a3
Q.front
a2
a1
首到队尾的各个元素,称为顺序队列。
(c)
d, e出队Q.front
Q.front
◆出队:首先删去front所指的元素,然后将队首指针front+1,并
◆rear所指的单元始终为空(a。)空队列
i
i, j, k入队
(e)
1
2
3
k
r
01
j5
2
front
43
i
b, g出队
(f )
r, p,
p rear
s, t入队
循环队列操作及指针变化情况
入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针 ,故队空和队满时头尾指针均相等。因此,无法通过front=rear来 判断队列“空”还是“满”。解决此问题的方法是:约定入队前,
数据结构与算法
1算法基础 2数据结构
3栈
4队列
5链表 6树和二叉树
7查找
4队列
✓队列的基本概念 ✓队列运算
✓循环队列及其运算
4队列
1.队列的基本概念
数据结构二叉树知识点总结
![数据结构二叉树知识点总结](https://img.taocdn.com/s3/m/98f868a9162ded630b1c59eef8c75fbfc77d94d3.png)
数据结构二叉树知识点总结二叉树是指每个节点最多有两个子节点的树结构。
它是一种重要的数据结构,在算法和程序设计中被广泛应用。
下面是对二叉树的主要知识点进行详细总结。
1.二叉树的基本概念:-树节点:树的基本单元,包含数据项(节点值)和指向其他节点的指针。
-根节点:树的第一个节点。
-叶节点(又称为终端节点):没有子节点的节点。
-子节点:一些节点的下一级节点。
-父节点:一些节点的上一级节点。
-兄弟节点:拥有同一父节点的节点。
-深度:从根节点到当前节点的路径长度。
-高度:从当前节点到最远叶节点的路径长度。
2.二叉树的分类:-严格二叉树:每个节点要么没有子节点,要么有两个子节点。
-完全二叉树:除了最后一层外,其他层的节点数都达到最大,并且最后一层的节点依次从左到右排列。
-满二叉树:每个节点要么没有子节点,要么有两个子节点,并且所有叶节点都在同一层上。
-平衡二叉树:任意节点的两棵子树的高度差不超过13.二叉树的遍历:-前序遍历:根节点->左子树->右子树。
递归实现时,先访问当前节点,然后递归遍历左子树和右子树。
-中序遍历:左子树->根节点->右子树。
递归实现时,先递归遍历左子树,然后访问当前节点,最后递归遍历右子树。
-后序遍历:左子树->右子树->根节点。
递归实现时,先递归遍历左子树,然后递归遍历右子树,最后访问当前节点。
-层序遍历:从上到下,从左到右依次访问每个节点。
使用队列实现。
4.二叉查找树(BST):-二叉查找树是一种有序的二叉树,对于树中的每个节点,其左子树的节点的值都小于当前节点的值,右子树的节点的值都大于当前节点的值。
-插入操作:从根节点开始,递归地比较要插入的值和当前节点的值,根据比较结果向左或向右移动,直到找到插入位置为止。
-查找操作:从根节点开始,递归地比较要查找的值和当前节点的值,根据比较结果向左或向右移动,直到找到目标节点或到叶节点。
-删除操作:有三种情况:-被删除节点是叶节点:直接将其删除。
数据结构与算法(3):二叉树
![数据结构与算法(3):二叉树](https://img.taocdn.com/s3/m/6823d5974693daef5ef73de8.png)
1.3.3 性质三
包含n个结点的二二叉树的高高度至至少为log2(n + 1);
证明:根据"性质2"可知,高高度为h的二二叉树最多有2{h}–1个结点。反之,对于包含n个节点的二二
叉树的高高度至至少为log2(n + 1)。
1.3.4 性质四
对任何一一颗二二叉树T,如果其终端结点数为n0 ,度为2的结点数为n2 ,则n0 = n2 + 1 证明:因为二二叉树中所有结点的度数均不不大大于2,所以结点总数(记为n)="0度结点数(n0)" + "1度 结点数(n1)" + "2度结点数(n2)"。由此,得到等式一一。(等式一一) n = n0 + n1 + n2
}
还有一一种方方式就是利利用用栈模拟递归过程实现循环先序遍历二二叉树。这种方方式具备扩展性,它模拟 了了递归的过程,将左子子树不不断的压入入栈,直到null,然后处理理栈顶节点的右子子树。
java
public void preOrder(Node root){ if(root==null)return;
2. 叶子子数为2h 3. 第k层的结点数是:2k−1; 4. 总结点数是2k − 1,且总节点数一一定是奇数。
1.4.2 完全二二叉树
定义:一一颗二二叉树中,只有最小小面面两层结点的度可以小小于2,并且最下一一层的叶结点集中在靠左 的若干干位置上。这样现在最下层和次下层,且最小小层的叶子子结点集中在树的左部。显然,一一颗 满二二叉树必定是一一颗完全二二叉树,而而完全二二叉树未必是满二二叉树。
} root = s.pop(); root = root.right;//如果是null,出栈并处理理右子子树 } }
数据结构概述思维导图-高清简单脑图模板-知犀思维导图
![数据结构概述思维导图-高清简单脑图模板-知犀思维导图](https://img.taocdn.com/s3/m/e08706cb80c758f5f61fb7360b4c2e3f57272522.png)
数据结构
概述
数据
数据元素是基本单位
数据项是数据的最小单位
算法
特征
有穷性正确性
可行性输入
输出
设计要求
正确性可读性
健壮性
效率与低存储需求
时间复杂度空间复杂度
线性表
顺序表
结构特点
存在唯一的第一个数据元素
存在最后一个数据元素
除第一个,每个都有一个前驱除第一个,每一个都有一个后继顺序表示和实现单链表
结点插入
结点删除
静态链表循环链表
双向链表
结点插入
结点删除受限线性表
栈
队列
树和二叉树
基础概念
结点
似
结点的子树数叶子结点
度为0的结点
森林
尽
二叉树
五种基本形态
空二叉树
仅有根结点的二叉树左右子树均非空的二叉树
右子树为空的二叉树左子树为空的二叉树
性质
存储结构
链式存储结构
遍历先序遍历先访问根结点中序遍历中间访问根结点后序遍历
最后访问根结点
线素化及其存储结构一般树
树和二叉树的转化遍历
先跟遍历
后跟遍历
森林
森林与二叉树的转化遍历
先序遍历
中序遍历
最优二叉树
数组和广义表
存储
对称矩阵的压缩。
2023年高考信息技术专题13 树与二叉树 知识点梳理(选修)(浙教版2019)
![2023年高考信息技术专题13 树与二叉树 知识点梳理(选修)(浙教版2019)](https://img.taocdn.com/s3/m/46a7dd431fb91a37f111f18583d049649a660e44.png)
第十三章树与二叉树一、线性结构和非线性结构线性结构的所有元素都是线性排列的,结构中必然存在唯一的“起点”和“终点”元素。
且除首尾元素外,都有且只有一个“前驱”和“后继”节点。
例:链表、队列、栈非线性结构则完全相反,结构中可能存在多个“起点”和“终点”元素。
所有节点都可能存在0个或多个“前驱”和“后继”节点。
例:树、图二、树形结构树可以描述为由n(n>=0)个节点和n-1条边构成的一个有限集合,以及在该集合上定义的一种节点关系。
树形结构是一种特殊的非线性结构,其特点是:只有一个没有“前驱”,只有“后继”的根节点。
有多个只有“前驱”没有“后继”的叶子节点,其余节点均只有一个“前驱”和多个“后继”。
树的示例1.描述树形结构的词1.1节点名称(Node):根节点:树中唯一没有前驱的节点,也称开始节点(A)叶子节点:树中没有后继的节点,也称终端节点(G,H,C,D,K,L,M,J,F)分支节点:除叶子节点之外的所有节点(A,B,E,I)内部节点:除根节点之外的分支节点(B,E,I)1.2节点关系:父子关系:节点间的前驱后继关系又称父子关系。
例:B是G的父节点;G是B的子节点兄弟关系:同一父节点下的所有节点关系称兄弟关系。
例:G和H是兄弟节点1.3度(Degree):节点的度:一个节点拥有的子树(后继节点)的个数称之为该节点的度。
树的度:一棵树中最大的度称之为树的度。
例:图中A点的度为5,是该树中度最大的点,故该树的度为5。
1.4层/深(Level):节点的层:节点的层数从根节点开始计算,根节点的层数为1。
每经过一条边,层数加1。
树的高度/深度(Depth):树中节点最大层数称为树的高度或深度。
例:图中K点的深度为4,是该树中深度最大的点,故该树深度为4。
三、二叉树二叉树是树形结构的一种特殊情况,二叉树的度<=2。
1.完全二叉树和满二叉树满二叉树:所有节点度为2或0;所有叶子节点在同一层完全二叉树:最多只有最深两层节点的度小于2;最深一层的叶子节点依次排列在最左边。
《Python数据结构与算法(视频教学版)》读书笔记模板
![《Python数据结构与算法(视频教学版)》读书笔记模板](https://img.taocdn.com/s3/m/5c6db176777f5acfa1c7aa00b52acfc789eb9fe5.png)
6.8小结 6.9习题
6.1.1图的定义 6.1.2图的相关概念 6.1.3图的抽象数据类型
6.2.1邻接矩阵表示法 6.2.2邻接表表示法 6.2.3十字链表 6.2.4邻接多重表
6.3.1图的深度优先遍历 6.3.2图的广度优先遍历
6.4.1无向图的连通分量与生成树 6.4.2最小生成树
6.5.1 AOV与拓扑排序 6.5.2 AOE与关键路径
6.6.1从某个顶点到其余各顶点的最短路径 6.6.2每一对顶点之间的最短路径
6.7.1距离某个顶点的最短路径长度为k的所有顶点 6.7.2求图中顶点u到顶点v的简单路径
1
7.1查找的基 本概念
2
7.2静态查找
3
7.3动态查找
4
7.4 B-树与B+ 树
5.3.1二叉树遍历的定义 5.3.2二叉树的先序遍历 5.3.3二叉树的中序遍历 5.3.4二叉树的后序遍历
5.4.1二叉树的线索化定义 5.4.2二叉树的线索化算法实现 5.4.3线索二叉树的遍历 5.4.4线索二叉树的应用举例
5.5.1树的存储结构 5.5.2树转换为二叉树 5.5.3森林转换为二叉树 5.5.4二叉树转换为树和森林 5.5.5树和森林的遍历
3.3栈与递归
3.4队列的表示与实 现
3.6小结
3.5队列的应用
3.7习题
3.1.1栈的定义 3.1.2栈的抽象数据类型 3.1.3顺序栈 3.1.4链栈
3.2.1进制转换 3.2.2行编辑程序 3.2.3算术表达式求值
3.3.1递归 3.3.2消除递归
3.4.1队列的定义 3.4.2队列的抽象数据类型 3.4.3顺序队列 3.4.4顺序循环队列 3.4.5双端队列 3.4.6链式队列 3.4.7链式队列的实现
【数据结构与算法笔记03】详解平衡二叉树的失衡类型划分及调整策略设计
![【数据结构与算法笔记03】详解平衡二叉树的失衡类型划分及调整策略设计](https://img.taocdn.com/s3/m/f6d343cba48da0116c175f0e7cd184254a351b5f.png)
【数据结构与算法笔记03】详解平衡⼆叉树的失衡类型划分及调整策略设计1. 平衡⼆叉树平衡⼆叉树对于树中的每个节点要求:左⼦树和右⼦树的深度差不超过1左右⼦树都是平衡⼆叉树平衡因⼦ = 左⼦树深度 - 右⼦树深度==> 在⼀棵平衡⼆叉树中,所有节点的平衡因⼦只可能有三种取值:-1, 0, 12. 失衡原因分析及失衡情况分类平衡⼆叉树是⼀种特殊的⼆叉排序树,插⼊新节点的⽅法与在⼆叉排序树中插⼊节点相同:先查找,然后在查找失败的位置插⼊新节点。
但是在⼀棵平衡⼆叉树中新插⼊⼀个节点可能会导致树的失衡,因此每次插⼊新节点之后要对树进⾏调整。
书上和⽹上的资料很多,但⼤部分都只给出了最终的结论,没有给出为什么要这样做的原因,现在我试图⽤⾃⼰的⽅式来理解AVL树的调整⽅法:1. 在平衡⼆叉树中新插⼊节点会造成树中某些节点平衡因⼦的改变,从⽽有失衡的风险。
==> 只有插⼊路径上的节点的平衡因⼦可能会改变。
==> 在插⼊路径上的节点中,只有那些原本的平衡因⼦为1, -1的节点可能会失衡(平衡因⼦变为2)。
==> 原本平衡因⼦为1的节点失衡后平衡因⼦会变为2;原本平衡因⼦为-1的节点失衡后平衡因⼦会变为-2。
并且这两种情况是对称的。
2. 在插⼊路径上可能会有多个节点失衡,但是⾼层节点的失衡是由低层节点的失衡造成的,因此存在⼀个最低失衡节点,只要将这个最低失衡节点调整平衡,并且保证以该节点为根的⼦树的⾼度和原来⼀样,那么⾼层节点的失衡就会⾃动恢复。
3. 所谓对失衡节点的调整,其实就是在已知⼀些⼦树和节点相互之间的⼤⼩关系以及他们的⾼度等信息时⽤这些⼦树和节点重新组装成⼀棵满⾜平衡⼆叉树要求的树。
下⾯仅考虑最低失衡节点原本的平衡因⼦为1的情况:==> 该节点失衡后平衡因⼦变为2,说明新节点的插⼊导致该节点的左⼦树的⾼度增加了1,这也间接说明了新节点插在了该节点的左⼦树上。
==> 插在该节点的左⼦树上有两种可能的情况:①该节点原本就没有左孩⼦,②该节点原本是有左孩⼦的。
第03章 算法与数据结构04树和二叉树2PPT课件
![第03章 算法与数据结构04树和二叉树2PPT课件](https://img.taocdn.com/s3/m/04bff7353c1ec5da51e2701c.png)
▪ 树的概念和基本术语 ▪ 二叉树 ▪ 二叉树遍历 ▪ 二叉树的计数 ▪ 树与森林
▪
树的概念和基本术语
树的定义
树是由 n (n 0) 个结点的有限集合。如 果 n = 0,称为空树;如果 n > 0,则
▪ 有且仅有一个特定的称之为根(Root)的结 点,它只有直接后继,但没有直接前驱;
▪ 当n > 1,除根以外的其它结点划分为 m (m >0) 个互不相交的有限集 T1, T2 ,…, Tm, 其中每个集合本身又是一棵树,并且称为 根的子树(SubTree)。
例如
A 只有根结点的树
A
BC
D
E F GH I J
KL
M
有13个结点的树
其中:A是根;其余结点分成三个互不相交的子集, T1={B,E,F,K,L}; T2={C,G}; T3={D,H,I,J,M}, T1,T2,T3都是根A的子树,且本身也是一棵树
4 5 67
1
8 9 10 11 12
1
2
3
2
3
45
45
6
非完全二叉树
67
性质4 具有 n (n 0) 个结点的完全二叉树 的深度为log2(n) +1 证明:
设完全二叉树的深度为 h,则根据性 质2和完全二叉树的定义有
2h-1 - 1 < n 2h- 1或 2h-1 n < 2h
取对数 h-1 < log2n h,又h是整数, 因此有 h = log2(n) +1
满二叉树。
1
2
3
45
67
8 9 10 11 12 13 14 15
满二叉树
定义2 完全二叉树 (Complete Binary Tree)