树、二叉树、查找树

合集下载

二叉树的基本操作

二叉树的基本操作

二叉树的基本操作二叉树是一种常见的数据结构,它由节点组成,每个节点最多有两个子节点。

二叉树在计算机领域中得到广泛应用,它的基本操作包括插入、删除、查找、遍历等。

1.插入操作:二叉树的插入操作是将一个新的节点添加到已有的二叉树中的过程。

插入操作会按照一定规则将新节点放置在正确的位置上。

插入操作的具体步骤如下:-首先,从根节点开始,比较新节点的值与当前节点的值的大小关系。

-如果新节点的值小于当前节点的值,则将新节点插入到当前节点的左子树中。

-如果新节点的值大于当前节点的值,则将新节点插入到当前节点的右子树中。

-如果当前节点的左子树或右子树为空,则直接将新节点插入到该位置上。

-如果当前节点的左子树和右子树都不为空,则递归地对左子树或右子树进行插入操作。

2.删除操作:二叉树的删除操作是将指定节点从二叉树中删除的过程。

删除操作有以下几种情况需要考虑:-如果待删除节点是叶子节点,则直接将其从二叉树中删除即可。

-如果待删除节点只有一个子节点,则将其子节点替换为待删除节点的位置即可。

-如果待删除节点有两个子节点,则需要找到其左子树或右子树中的最大节点或最小节点,将其值替换为待删除节点的值,然后再删除最大节点或最小节点。

3.查找操作:二叉树的查找操作是在二叉树中查找指定值的节点的过程。

查找操作的具体步骤如下:-从根节点开始,将待查找值与当前节点的值进行比较。

-如果待查找值等于当前节点的值,则返回该节点。

-如果待查找值小于当前节点的值,则在当前节点的左子树中继续查找。

-如果待查找值大于当前节点的值,则在当前节点的右子树中继续查找。

-如果左子树或右子树为空,则说明在二叉树中找不到该值。

4.遍历操作:二叉树的遍历操作是按照一定规则依次访问二叉树中的每个节点。

有三种常用的遍历方式:- 前序遍历(Preorder Traversal):先访问根节点,然后递归地前序遍历左子树和右子树。

- 中序遍历(Inorder Traversal):先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。

2017唐班数据结构-20二叉查找树

2017唐班数据结构-20二叉查找树
return t;▌
FindMin和FindMax
算法FindMin(t) /* 在以t为根的树找最小元素*/ F1[一路向左]
if( t != NULL ) while( t->llink != NULL) t = t->llink;
return t;
插入
O
E
U
A
I
5
6
1
23
4
O
E
U
A
I
6
7
情况2:“双重转动”。 首先,以 X 为轴将 B 从 X 的右上侧右转到 X 的 右下侧,记为(X,B),从而 A 的右儿子是 X,
X 的右儿子是 B,原 X 的右子树 变成了新 B
的左子树;
A B
A X
h
+X
h
h
•B
h1
h
h1
h
h
然后,以 X 为轴心 , 把 A 从 X 的左上方左转到 X 的左下侧 , 记为(A , X) , 使 X 的左儿子是 A , 右儿子
KEY DATA B
LLINK
RLINK
ROOT
树形总高度
B RLINK
DATA KEY B
LLINK
RLINK
查找和插入操作
在一株高度平衡二叉树上插入结点,可能会破坏其平衡性。 如,在图 8.23 中,如果新结点被插入高度平衡树的外结点
4 , 5 , 6 , 7 , 10 , 13 等处则无损平衡性。
第八章 查找 II 树查找
树的引入
对半查找、斐波那契查找等都对应一棵隐 式的(implicit)二叉树;
用一个显式的(explicit)二叉树结构组织数据 进行查找;

二叉树算法应用

二叉树算法应用

二叉树算法应用一、简介二叉树是一种常见的树形数据结构,它由节点组成,每个节点最多有两个子节点。

二叉树算法是指在二叉树上进行各种操作和解决问题的算法。

二叉树算法广泛应用于计算机科学领域,如数据结构、图像处理、人工智能等。

本文将介绍二叉树算法的几个常见应用。

二、二叉搜索树二叉搜索树是一种特殊的二叉树,它的每个节点的左子树中的所有节点都小于该节点,右子树中的所有节点都大于该节点。

二叉搜索树的一个重要应用是实现快速的查找和插入操作。

通过比较节点的值,可以快速定位目标节点,并在O(log n)的时间复杂度内完成操作。

三、二叉树的遍历二叉树的遍历是指按照一定的顺序访问二叉树的所有节点。

常见的遍历方式有前序遍历、中序遍历和后序遍历。

前序遍历先访问根节点,然后递归地遍历左子树和右子树;中序遍历先遍历左子树,然后访问根节点,最后遍历右子树;后序遍历先遍历左子树,然后遍历右子树,最后访问根节点。

二叉树的遍历可以用来输出树的结构、搜索树中的最大值和最小值等。

四、二叉树的深度和平衡二叉树的深度是指从根节点到叶子节点的最长路径的节点个数。

二叉树的平衡是指左右子树的深度差不超过1。

平衡二叉树是一种特殊的二叉树,它的插入和删除操作可以在O(log n)的时间复杂度内完成。

平衡二叉树的一个常见应用是实现高效的查找、插入和删除操作,如AVL树和红黑树。

五、二叉树的序列化和反序列化二叉树的序列化是指将二叉树转化为字符串或数组的过程,可以用来存储和传输二叉树。

二叉树的反序列化是指将字符串或数组转化为二叉树的过程。

序列化和反序列化可以用来保存二叉树的状态、复制二叉树以及在分布式系统中传输二叉树等。

常见的序列化方式有前序遍历和层序遍历。

六、二叉树的重建和转换二叉树的重建是指根据前序遍历和中序遍历或后序遍历和中序遍历的结果,重新构建出原始二叉树。

二叉树的转换是指将二叉树转化为另一种形式的二叉树,如将二叉搜索树转化为有序的双向链表。

重建和转换可以用来解决二叉树的复制、恢复和转换等问题。

二叉树用途

二叉树用途

二叉树用途二叉树是一种常用的数据结构,由节点和连接节点的边组成,其中每个节点最多有两个子节点,被称为左子节点和右子节点。

二叉树具有以下特点:1. 有层次结构:节点按照层次排列,每层从左到右。

2. 可以拥有零个、一个或两个子节点。

3. 二叉树的子树也是二叉树。

4. 深度为d的二叉树最多含有2^d-1个节点,其中d为二叉树的深度。

二叉树的用途非常广泛,下面将详细讨论几个主要的应用场景。

1. 搜索、排序和查找:二叉树可以用于快速搜索、排序和查找数据。

二叉搜索树是一种常用的二叉树类型,其中每个节点的值大于左子树的所有节点的值,小于右子树的所有节点的值。

通过二分查找算法,在二叉搜索树中可以快速定位目标值。

2. 堆:二叉堆是一种用于实现优先队列的数据结构。

它具有以下特点:任意节点的关键字值都小于(或大于)或等于其子节点的关键字值,根节点的关键字值最小(或最大);并且堆是一颗完全二叉树。

二叉堆的插入和删除操作的时间复杂度为O(log n),适用于一些需要高效的优先级操作的场景,例如任务调度。

3. 表达式树:二叉树可以用于存储和计算数学表达式。

表达式树是一种二叉树,其叶节点是操作数,内部节点是操作符。

通过遍历表达式树,我们可以通过递归的方式计算整个表达式的值。

4. 文件系统:二叉树可以用于组织和管理文件系统中的文件和文件夹。

每个节点代表一个文件或文件夹,左子节点代表文件夹下的子文件夹,右子节点代表同一层级下的其他文件或文件夹。

通过遍历二叉树,可以实现文件的查找、创建、删除等操作。

5. 数据压缩:哈夫曼树是一种常用的数据压缩算法,通过构建二叉树来实现。

在哈夫曼树中,出现频率较高的字符对应的节点位于树的较低层,而出现频率较低的字符对应的节点位于树的较高层。

通过对字符进行编码,并使用相对较短的编码表示高频字符,可以实现对数据的高效压缩和解压缩。

6. 平衡树:平衡树是一种特殊类型的二叉树,其左子树和右子树的高度差不超过1。

二叉排序树查找的递归算法

二叉排序树查找的递归算法

二叉排序树查找的递归算法介绍二叉排序树(Binary Search Tree),也称二叉查找树、有序二叉树或排序二叉树,是一种常用的数据结构。

它具有以下特点:•每个节点都包含一个键值和对应的数据。

•左子树中的所有节点的键值都小于根节点的键值。

•右子树中的所有节点的键值都大于根节点的键值。

•左右子树也分别是二叉排序树。

二叉排序树支持高效的查找、插入和删除操作,其中查找操作是利用递归实现的。

本文将详细介绍二叉排序树查找的递归算法。

二叉排序树的定义二叉排序树的定义如下:class TreeNode:def __init__(self, key, data):self.key = keyself.data = dataself.left = Noneself.right = Noneclass BinarySearchTree:def __init__(self):self.root = None在二叉排序树中,每个节点都是一个TreeNode对象,包含键值key和对应的数据data。

left和right分别指向左子树和右子树的根节点。

树的根节点由BinarySearchTree对象的root属性表示。

二叉排序树查找的递归算法二叉排序树的查找操作是利用递归实现的,其具体算法如下:1.如果待查找的键值等于当前节点的键值,返回当前节点的数据。

2.如果待查找的键值小于当前节点的键值,递归在左子树中查找。

3.如果待查找的键值大于当前节点的键值,递归在右子树中查找。

4.如果在左子树或右子树中找不到对应的键值,则返回空。

下面是二叉排序树查找的递归算法的代码实现:def search_recursive(node, key):if node is None or node.key == key:return node.dataelif key < node.key:return search_recursive(node.left, key)else:return search_recursive(node.right, key)在上述代码中,node表示当前节点,key表示待查找的键值。

数据结构:第9章 查找2-二叉树和平衡二叉树

数据结构:第9章 查找2-二叉树和平衡二叉树
NODE *t; char x; {if(t==NULL)
return(NULL); else
{if(t->data==x) return(t);
if(x<(t->data) return(search(t->lchild,x));
else return(search(t->lchild,x)); } }
——这种既查找又插入的过程称为动态查找。 二叉排序树既有类似于折半查找的特性,又采用了链表存储, 它是动态查找表的一种适宜表示。
注:若数据元素的输入顺序不同,则得到的二叉排序树形态 也不同!
讨论1:二叉排序树的插入和查找操作 例:输入待查找的关键字序列=(45,24,53,45,12,24,90)
二叉排序树的建立 对于已给定一待排序的数据序列,通常采用逐步插入结点的方 法来构造二叉排序树,即只要反复调用二叉排序树的插入算法 即可,算法描述为: BiTree *Creat (int n) //建立含有n个结点的二叉排序树 { BiTree *BST= NULL;
for ( int i=1; i<=n; i++) { scanf(“%d”,&x); //输入关键字序列
– 法2:令*s代替*p
将S的左子树成为S的双亲Q的右子树,用S取代p 。 若C无右子树,用C取代p。
例:请从下面的二叉排序树中删除结点P。
F P
法1:
F
P
C
PR
C
PR
CL Q
CL QL
Q SL
S PR
QL S
SL
法2:
F
PS
C
PR
CL Q
QL SL S SL

数据结构 -第12周查找第3讲-二叉排序树.pdf

数据结构 -第12周查找第3讲-二叉排序树.pdf

以二叉树或树作为表的组织形式,称为树表,它是一类动态查找表,不仅适合于数据查找,也适合于表插入和删除操作。

常见的树表:二叉排序树平衡二叉树B-树B+树9.3.1 二叉排序树二叉排序树(简称BST)又称二叉查找(搜索)树,其定义为:二叉排序树或者是空树,或者是满足如下性质(BST性质)的二叉树:❶若它的左子树非空,则左子树上所有节点值(指关键字值)均小于根节点值;❷若它的右子树非空,则右子树上所有节点值均大于根节点值;❸左、右子树本身又各是一棵二叉排序树。

注意:二叉排序树中没有相同关键字的节点。

二叉树结构满足BST性质:节点值约束二叉排序树503080209010854035252388例如:是二叉排序树。

66不试一试二叉排序树的中序遍历序列有什么特点?二叉排序树的节点类型如下:typedef struct node{KeyType key;//关键字项InfoType data;//其他数据域struct node*lchild,*rchild;//左右孩子指针}BSTNode;二叉排序树可看做是一个有序表,所以在二叉排序树上进行查找,和二分查找类似,也是一个逐步缩小查找范围的过程。

1、二叉排序树上的查找Nk< bt->keybtk> bt->key 每一层只和一个节点进行关键字比较!∧∧p查找到p所指节点若k<p->data,并且p->lchild=NULL,查找失败。

若k>p->data,并且p->rchild=NULL,查找失败。

查找失败的情况加上外部节点一个外部节点对应某内部节点的一个NULL指针递归查找算法SearchBST()如下(在二叉排序树bt上查找关键字为k的记录,成功时返回该节点指针,否则返回NULL):BSTNode*SearchBST(BSTNode*bt,KeyType k){if(bt==NULL||bt->key==k)//递归出口return bt;if(k<bt->key)return SearchBST(bt->lchild,k);//在左子树中递归查找elsereturn SearchBST(bt->rchild,k);//在右子树中递归查找}在二叉排序树中插入一个关键字为k的新节点,要保证插入后仍满足BST性质。

二叉树

二叉树

平衡树——特点:所有结点左右子树深度差≤1排序树——特点:所有结点―左小右大字典树——由字符串构成的二叉排序树判定树——特点:分支查找树(例如12个球如何只称3次便分出轻重)带权树——特点:路径带权值(例如长度)最优树——是带权路径长度最短的树,又称Huffman树,用途之一是通信中的压缩编码。

1.1 二叉排序树:或是一棵空树;或者是具有如下性质的非空二叉树:(1)若左子树不为空,左子树的所有结点的值均小于根的值;(2)若右子树不为空,右子树的所有结点均大于根的值;(3)它的左右子树也分别为二叉排序树。

例:二叉排序树如图9.7:二叉排序树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉排序树的存储结构。

中序遍历二叉排序树可得到一个关键字的有序序列,一个无序序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。

每次插入的新的结点都是二叉排序树上新的叶子结点,在进行插入操作时,不必移动其它结点,只需改动某个结点的指针,由空变为非空即可。

搜索,插入,删除的复杂度等于树高,期望O(logn),最坏O(n)(数列有序,树退化成线性表).虽然二叉排序树的最坏效率是O(n),但它支持动态查询,且有很多改进版的二叉排序树可以使树高为O(logn),如SBT,AVL,红黑树等.故不失为一种好的动态排序方法.2.2 二叉排序树b中查找在二叉排序树b中查找x的过程为:1. 若b是空树,则搜索失败,否则:2. 若x等于b的根节点的数据域之值,则查找成功;否则:3. 若x小于b的根节点的数据域之值,则搜索左子树;否则:4. 查找右子树。

[cpp]view plaincopyprint?1.Status SearchBST(BiTree T, KeyType key, BiTree f, BiTree &p){2. //在根指针T所指二叉排序樹中递归地查找其关键字等于key的数据元素,若查找成功,3. //则指针p指向该数据元素节点,并返回TRUE,否则指针P指向查找路径上访问的4. //最好一个节点并返回FALSE,指针f指向T的双亲,其初始调用值为NULL5. if(!T){ p=f; return FALSE;} //查找不成功6. else if EQ(key, T->data.key) {P=T; return TRUE;} //查找成功7. else if LT(key,T->data.key)8. return SearchBST(T->lchild, key, T, p); //在左子树继续查找9. else return SearchBST(T->rchild, key, T, p); //在右子树继续查找10.}2.3 在二叉排序树插入结点的算法向一个二叉排序树b中插入一个结点s的算法,过程为:1. 若b是空树,则将s所指结点作为根结点插入,否则:2. 若s->data等于b的根结点的数据域之值,则返回,否则:3. 若s->data小于b的根结点的数据域之值,则把s所指结点插入到左子树中,否则:4. 把s所指结点插入到右子树中。

二叉查找树 例题

二叉查找树 例题

二叉查找树例题
二叉查找树(Binary Search Tree)是一种特殊的二叉树,每个节点的键值都大于左子树任意节点的键值,小于右子树任意节点的键值。

这种结构使得在二叉查找树中查找、插入和删除元素的操作都变得相对简单。

以下是一个简单的二叉查找树的例题:
题目:给定一个未排序的整数数组,检查是否存在重复元素。

解题思路:
这道题可以使用二叉查找树解决。

我们可以遍历数组中的每个元素,并将它们插入到二叉查找树中。

如果存在重复元素,则插入操作会失败,我们就可以提前返回结果。

如果不存在重复元素,则插入所有元素后,我们遍历二叉查找树即可验证结果。

具体实现如下:
1. 定义一个二叉查找树节点类,包含键值和左右子节点。

2. 定义一个二叉查找树类,包含根节点和插入、查找、遍历等方法。

3. 遍历给定的未排序整数数组,将每个元素插入到二叉查找树中。

如果插入失败(即该元素已存在于二叉查找树中),则说明存在重复元素,返回true。

4. 如果插入所有元素后都没有返回true,则遍历二叉查找树中的所有节点,检查它们的键值是否在给定的未排序整数数组中出现过。

如果出现过,则说明存在重复元素,返回true;否则返回false。

时间复杂度:O(nlogn),其中n 是给定数组的长度。

空间复杂度:O(n),其中n 是给定数组的长度。

二叉树知识点总结

二叉树知识点总结

二叉树知识点总结二叉树是一种常见的数据结构,它由节点和边组成,每个节点最多有两个子节点。

以下是关于二叉树的知识点总结。

1. 二叉树的基本概念二叉树是一种树形结构,它由节点和边组成。

每个节点最多有两个子节点,分别称为左子节点和右子节点。

如果一个节点没有子节点,则称其为叶子节点。

二叉树可以为空。

2. 二叉树的遍历方式遍历是指按照一定顺序访问二叉树中的所有节点。

常见的遍历方式有前序遍历、中序遍历和后序遍历。

前序遍历:先访问当前节点,然后递归访问左子树和右子树。

中序遍历:先递归访问左子树,然后访问当前节点,最后递归访问右子树。

后序遍历:先递归访问左子树和右子树,最后访问当前节点。

3. 二叉搜索树二叉搜索树(Binary Search Tree)也称为有序二叉树或排序二叉树。

它是一种特殊的二叉树,在满足以下条件的情况下被称为“搜索”:对于任意节点,其左子树中的所有节点的值都小于该节点的值。

对于任意节点,其右子树中的所有节点的值都大于该节点的值。

左右子树也分别为二叉搜索树。

二叉搜索树支持快速查找、插入和删除操作。

它还有一些变种,如平衡二叉搜索树(AVL Tree)和红黑树(Red-Black Tree)等。

4. 二叉堆二叉堆是一种特殊的完全二叉树,它分为最大堆和最小堆两种类型。

最大堆满足父节点的值大于等于其子节点的值,最小堆满足父节点的值小于等于其子节点的值。

在最大堆中,根节点是整个堆中最大的元素;在最小堆中,根节点是整个堆中最小的元素。

二叉堆常用来实现优先队列(Priority Queue),即按照一定优先级顺序处理元素。

5. 二叉树常见问题5.1 判断是否为平衡二叉树平衡二叉树(Balanced Binary Tree)是指任意节点左右子树高度差不超过1的二叉搜索树。

判断一个二叉搜索树是否为平衡二叉树可以通过递归遍历每个节点,计算其左右子树的高度差。

5.2 判断是否为完全二叉树完全二叉树(Complete Binary Tree)是指除了最后一层外,其他层都是满的,并且最后一层的节点都靠左排列的二叉树。

二叉树基本运算算法的实现

二叉树基本运算算法的实现

二叉树基本运算算法的实现
二叉树是一种常见的数据结构,基本运算算法包括二叉树的遍历、查找、插入、删除等操作。

下面是这些算法的实现:
1. 二叉树遍历:二叉树遍历有三种方式,分别是前序遍历、中序遍历和后序遍历。

其中,前序遍历先访问根节点,再访问左子树和右子树;中序遍历先访问左子树,再访问根节点和右子树;后序遍历先访问左子树,再访问右子树和根节点。

遍历可以使用递归算法或栈实现。

2. 二叉树查找:二叉树查找可以使用递归算法或循环算法实现。

递归算法通过比较节点值实现查找,如果查找值小于当前节点值,则在左子树中查找,否则在右子树中查找。

循环算法使用二叉树的特性,比较查找值和当前节点值的大小,根据大小关系不断移动到左子树或右子树中进行查找,直到找到目标节点或遍历到叶子节点为止。

3. 二叉树插入:二叉树插入需要先查找到插入位置,然后在该位置插入一个新节点。

插入操作可以使用递归算法或循环算法实现。

4. 二叉树删除:二叉树删除分为三种情况:删除叶子节点、删除只有一个孩子的节点和删除有两个孩子的节点。

删除叶子节点很简单,只需要将其父节点的指针设为NULL即可。

删除只有一个孩子的节点需要将父节点的指针指向该节点的
孩子节点。

删除有两个孩子的节点需要找到该节点的后继节点(或前驱节点),将后继节点的值复制到该节点中,然后删除后继节点。

上述算法的实现需要根据具体的编程语言进行调整和实现。

数据结构与算法(3):二叉树

数据结构与算法(3):二叉树
证!
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,出栈并处理理右子子树 } }

二叉树各种计算公式总结

二叉树各种计算公式总结

二叉树各种计算公式总结二叉树是一种常见的数据结构,它由一个根节点和最多两个子节点组成。

许多计算问题可以通过对二叉树进行各种操作和遍历来解决。

在本文中,将总结二叉树的各种计算公式。

1.二叉树节点个数:二叉树节点个数的计算公式是N=N1+N2+1,其中N表示二叉树的节点个数,N1表示左子树的节点个数,N2表示右子树的节点个数。

2. 二叉树的高度:二叉树的高度是指从根节点到最远叶子节点的最长路径上的节点数量。

计算二叉树的高度的公式是H = max(H1, H2) + 1,其中H表示二叉树的高度,H1表示左子树的高度,H2表示右子树的高度。

3.二叉树的深度:二叉树的深度是指从根节点到当前节点的路径的长度。

计算二叉树的深度的公式是D=D1+1,其中D表示二叉树的深度,D1表示父节点的深度。

4.二叉查找树:二叉查找树是一种有序二叉树,它要求对于树中的每个节点,左子树的值都小于节点的值,右子树的值都大于节点的值。

在二叉查找树中进行的公式是:-如果目标值等于当前节点的值,则返回当前节点;-如果目标值小于当前节点的值,则在左子树中继续;-如果目标值大于当前节点的值,则在右子树中继续。

5.二叉树的遍历:二叉树的遍历是指按照一定的顺序访问二叉树中的所有节点。

常见的二叉树遍历方式有三种:- 前序遍历:先访问根节点,然后递归地访问左子树,最后递归地访问右子树。

可以表示为:root -> 左子树 -> 右子树。

- 中序遍历:先递归地访问左子树,然后访问根节点,最后递归地访问右子树。

可以表示为:左子树 -> root -> 右子树。

- 后序遍历:先递归地访问左子树,然后递归地访问右子树,最后访问根节点。

可以表示为:左子树 -> 右子树 -> root。

6.二叉树的最大路径和:二叉树的最大路径和是指二叉树中两个节点之间路径上的节点值的最大和。

可以通过递归地计算每个子树的最大路径和,然后选择最大的子树路径和来得出最终结果。

二叉树的各种算法

二叉树的各种算法

二叉树的各种算法1.二叉树的前序遍历算法:前序遍历是指先访问根节点,再访问左子树,最后访问右子树的遍历顺序。

具体算法如下:-如果二叉树为空,则直接返回。

-访问根节点,并输出或进行其他操作。

-递归地前序遍历左子树。

-递归地前序遍历右子树。

2.二叉树的中序遍历算法:中序遍历是指先访问左子树,再访问根节点,最后访问右子树的遍历顺序。

具体算法如下:-如果二叉树为空,则直接返回。

-递归地中序遍历左子树。

-访问根节点,并输出或进行其他操作。

-递归地中序遍历右子树。

3.二叉树的后序遍历算法:后序遍历是指先访问左子树,再访问右子树,最后访问根节点的遍历顺序。

具体算法如下:-如果二叉树为空,则直接返回。

-递归地后序遍历左子树。

-递归地后序遍历右子树。

-访问根节点,并输出或进行其他操作。

4.二叉树的层序遍历算法:层序遍历是按照从上到下、从左到右的顺序逐层遍历二叉树的节点。

具体算法如下:-如果二叉树为空,则直接返回。

-创建一个队列,将根节点入队。

-循环执行以下步骤,直到队列为空:-出队并访问当前节点,并输出或进行其他操作。

-若当前节点的左子节点不为空,则将左子节点入队。

-若当前节点的右子节点不为空,则将右子节点入队。

5.二叉树的深度算法:二叉树的深度是指从根节点到叶节点的最长路径的节点数。

具体算法如下:-如果二叉树为空,则深度为0。

-否则,递归地计算左子树的深度和右子树的深度,然后取较大的值加上根节点的深度作为二叉树的深度。

6.二叉树的查找算法:二叉树的查找可以使用前序、中序或后序遍历来完成。

具体算法如下:-如果二叉树为空,则返回空。

-如果当前节点的值等于目标值,则返回当前节点。

-否则,先在左子树中递归查找,如果找到则返回找到的节点。

-如果左子树中未找到,则在右子树中递归查找,如果找到则返回找到的节点。

-如果左右子树中都未找到,则返回空。

7.二叉树的插入算法:二叉树的插入可以使用递归或循环来实现。

具体算法如下:-如果二叉树为空,则创建一个新节点作为根节点,并返回根节点。

数据结构中各种树

数据结构中各种树

数据结构中各种树阅读⽬录 数据结构中有很多树的结构,其中包括⼆叉树、⼆叉搜索树、2-3树、红⿊树等等。

本⽂中对数据结构中常见的⼏种树的概念和⽤途进⾏了汇总,不求严格精准,但求简单易懂。

1. ⼆叉树 ⼆叉树是数据结构中⼀种重要的数据结构,也是树表家族最为基础的结构。

⼆叉树的定义:⼆叉树的每个结点⾄多只有⼆棵⼦树(不存在度⼤于2的结点),⼆叉树的⼦树有左右之分,次序不能颠倒。

⼆叉树的第i层⾄多有2i-1个结点;深度为k的⼆叉树⾄多有2k-1个结点;对任何⼀棵⼆叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。

⼆叉树的⽰例:满⼆叉树和完全⼆叉树: 满⼆叉树:除最后⼀层⽆任何⼦节点外,每⼀层上的所有结点都有两个⼦结点。

也可以这样理解,除叶⼦结点外的所有结点均有两个⼦结点。

节点数达到最⼤值,所有叶⼦结点必须在同⼀层上。

满⼆叉树的性质: 1) ⼀颗树深度为h,最⼤层数为k,深度与最⼤层数相同,k=h; 2) 叶⼦数为2h; 3) 第k层的结点数是:2k-1; 4) 总结点数是:2k-1,且总节点数⼀定是奇数。

完全⼆叉树:若设⼆叉树的深度为h,除第 h 层外,其它各层 (1~(h-1)层) 的结点数都达到最⼤个数,第h层所有的结点都连续集中在最左边,这就是完全⼆叉树。

注:完全⼆叉树是效率很⾼的数据结构,堆是⼀种完全⼆叉树或者近似完全⼆叉树,所以效率极⾼,像⼗分常⽤的排序算法、Dijkstra算法、Prim算法等都要⽤堆才能优化,⼆叉排序树的效率也要借助平衡性来提⾼,⽽平衡性基于完全⼆叉树。

⼆叉树的性质:1) 在⾮空⼆叉树中,第i层的结点总数不超过2i-1, i>=1; 2) 深度为h的⼆叉树最多有2h-1个结点(h>=1),最少有h个结点; 3) 对于任意⼀棵⼆叉树,如果其叶结点数为N0,⽽度数为2的结点总数为N2,则N0=N2+1; 4) 具有n个结点的完全⼆叉树的深度为log2(n+1); 5)有N个结点的完全⼆叉树各结点如果⽤顺序⽅式存储,则结点之间有如下关系: 若I为结点编号则如果I>1,则其⽗结点的编号为I/2; 如果2I<=N,则其左⼉⼦(即左⼦树的根结点)的编号为2I;若2I>N,则⽆左⼉⼦; 如果2I+1<=N,则其右⼉⼦的结点编号为2I+1;若2I+1>N,则⽆右⼉⼦。

二叉树知识点总结

二叉树知识点总结

二叉树知识点总结二叉树是数据结构中常见且重要的一种形式,它可以用于解决许多实际问题,并在算法和编程中扮演着重要的角色。

本文将对二叉树的基本概念、性质以及常见的应用进行总结。

一、基本概念和性质1. 二叉树的定义:二叉树是一种特殊的树形结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。

左子节点小于等于父节点,右子节点大于等于父节点。

2. 二叉树的特点:二叉树具有递归性质,即每个子节点都可以视为一棵二叉树。

同时,二叉树的遍历方式有前序遍历、中序遍历、后序遍历和层次遍历等。

3. 二叉树的性质:a. 二叉树的第i层至多有2^(i-1)个节点;b. 深度为k的二叉树至多有2^k - 1个节点;c. 对于任意一棵二叉树,若其叶节点数为n0,度为2的节点数为n2,则n0 = n2 + 1;d. 具有n个节点的完全二叉树的深度为(log2 n) + 1。

二、二叉树的应用1. 二叉搜索树:二叉搜索树(BST)是一种特殊的二叉树,它满足左子节点小于父节点,右子节点大于父节点的条件。

BST的特性使得查找、插入和删除操作的时间复杂度为O(log n),因此在数据库、图形处理等领域经常被使用。

2. 平衡二叉树:由于BST的特性,如果数据插入的顺序不合理,可能导致树的高度过高,使得操作效率降低。

为了解决这个问题,人们提出了平衡二叉树(AVL)的概念。

AVL树通过旋转操作保持树的平衡,使得左右子树的高度差不超过1,从而保证了操作的效率。

3. 红黑树:红黑树是一种自平衡的二叉查找树,它在AVL树的基础上做了一些调整。

红黑树的特点是节点可以为红色或黑色,并且满足以下规则:根节点为黑色,叶节点为黑色且为空,红色节点的两个子节点都是黑色。

红黑树在C++标准库(STL)中的map和set等容器中得到了广泛应用。

4. 堆:堆是一种完全二叉树,它可以分为大顶堆和小顶堆。

大顶堆中,父节点的值大于或等于两个子节点的值,小顶堆则相反。

堆在排序算法中有广泛应用,如堆排序、优先队列等。

常见基本数据结构——树,二叉树,二叉查找树,AVL树

常见基本数据结构——树,二叉树,二叉查找树,AVL树

常见基本数据结构——树,⼆叉树,⼆叉查找树,AVL树常见数据结构——树处理⼤量的数据时,链表的线性时间太慢了,不宜使⽤。

在树的数据结构中,其⼤部分的运⾏时间平均为O(logN)。

并且通过对树结构的修改,我们能够保证它的最坏情形下上述的时间界。

树的定义有很多种⽅式。

定义树的⾃然的⽅式是递归的⽅式。

⼀棵树是⼀些节点的集合,这个集合可以是空集,若⾮空集,则⼀棵树是由根节点r以及0个或多个⾮空⼦树T1,T2,T3,......,Tk组成,这些⼦树中每⼀棵的根都有来⾃根r的⼀条有向的边所连接。

从递归的定义中,我们发现⼀棵树是N个节点和N-1条边组成的,每⼀个节点都有⼀条边连接⽗节点,但是根节点除外。

具有相同⽗亲的节点为兄弟,类似的⽅法可以定义祖⽗和孙⼦的关系。

从节点n1到nk的路径定义为节点n1,n2,...,nk的⼀个序列,并且ni是ni+1的⽗亲。

这个路径的长是路径上的边数,即k-1。

每个节点到⾃⼰有⼀条长为0的路径。

⼀棵树从根到叶⼦节点恰好存在⼀条路径。

对于任意的节点ni,ni的深度为从根到ni的唯⼀路径长。

ni的⾼是从ni到⼀⽚叶⼦的最长路径的长。

因此,所有的树叶的⾼度都是0,⼀棵树的⾼等于它的根节点的⾼。

⼀棵树的深度总是等于它最深叶⼦的深度;该深度等于这棵树的⾼度。

树的实现实现树的⼀种⽅法可以是在每⼀个节点除数据外还要有⼀些指针,使得该节点的每⼀个⼉⼦都有⼀个指针指向它。

但是由于每个节点的⼉⼦树可以变化很⼤⽽且事先不知道,故在各个节点建⽴⼦节点的链接是不可⾏的,这样将会浪费⼤量的空间。

实际的做法很简单:将每个节点的所有⼉⼦都放在树节点的链表中。

下⾯是典型的声明:typedef struct TreeNode *PtrToNodestruct TreeNode{ ElementType Element; PtrToNode FirstChild; PtrToNode NextSibling}下⾯是⼉⼦兄弟表⽰法的图⽰:树的遍历及应⽤⼀个常见的使⽤是操作系统中的⽬录结构。

树、二叉树、查找算法总结

树、二叉树、查找算法总结

树、⼆叉树、查找算法总结树的定义形式化定义树:T={D,R }。

D是包含n个结点的有限集合(n≥0)。

当n=0时为空树,否则关系R满⾜以下条件:l 有且仅有⼀个结点d0∈D,它对于关系R来说没有前驱结点,结点d0称作树的根结点。

l 除根结点外,每个结点有且仅有⼀个前驱结点。

l D中每个结点可以有零个或多个后继结点。

递归定义树是由n(n≥0)个结点组成的有限集合(记为T)。

其中:l 如果n=0,它是⼀棵空树,这是树的特例;l 如果n>0,这n个结点中存在⼀个唯⼀结点作为树的根结点(root),其余结点可分为m (m≥0)个互不相交的有限⼦集T1、T2、…、Tm,⽽每个⼦集本⾝⼜是⼀棵树,称为根结点root的⼦树。

ð 树中所有结点构成⼀种层次关系!树的基本术语度结点的度:⼀个结点的⼦树的个数树的度:各节点的度的最⼤值。

通常将度为m的树成为m次树或m叉树结点分⽀结点:度不为0的结点(也称⾮终端结点)度为1的结点成为单分⽀结点,度为2的结点称为双分⽀结点叶结点:度为0的结点路径与路径长度路径:两个结点di和dj的结点序列(di,di1,di2,…,dj)。

其中<dx,dy>是分⽀。

路径长度:等于路径所通过的结点数⽬减1(即路径上的分⽀数⽬)结点的层次和树⾼度层次:根结点层次为1,它的孩⼦结点层次为2。

以此类推。

树的⾼度(深度):结点中的最⼤层次;有序树和⽆序树有序树:若树中各结点的⼦树是按照⼀定的次序从左向右安排的,且相对次序是不能随意变换的⽆序树:和上⾯相反森林只要把树的根结点删去就成了森林。

反之,只要给n棵独⽴的树加上⼀个结点,并把这n棵树作为该结点的⼦树,则森林就变成了⼀颗树。

树的性质性质1:树中的结点数等于所有结点的度数之和加1。

证明:树的每个分⽀记为⼀个度,度数和=分⽀和,⽽再给根节点加个分⽀性质2:度为m的树中第i层上⾄多有mi-1个结点(i≥1)。

性质3 ⾼度为h的m次树⾄多有个结点。

二叉检索树构造

二叉检索树构造

二叉检索树构造摘要:一、二叉检索树的定义和性质1.二叉检索树的定义2.二叉检索树的性质二、二叉检索树的构造方法1.顺序插入法2.二叉树转化法三、二叉检索树的应用1.查找2.插入3.删除正文:二叉检索树是一种特殊的二叉树,具有以下性质:若左子树不为空,则左子树上所有结点的值均小于根结点的值;若右子树不为空,则右子树上所有结点的值均大于根结点的值;左、右子树也分别为二叉检索树。

基于这些性质,二叉检索树可以用来实现高效的查找、插入和删除操作。

一、二叉检索树的定义和性质1.二叉检索树的定义二叉检索树,又称有序二叉树,是一种特殊的二叉树。

每个结点具有以下性质:若左子树不为空,则左子树上所有结点的值均小于根结点的值;若右子树不为空,则右子树上所有结点的值均大于根结点的值;左、右子树也分别为二叉检索树。

2.二叉检索树的性质二叉检索树具有以下几个基本性质:(1)若左子树不为空,则左子树上所有结点的值均小于根结点的值。

(2)若右子树不为空,则右子树上所有结点的值均大于根结点的值。

(3)左、右子树也分别为二叉检索树。

二、二叉检索树的构造方法1.顺序插入法顺序插入法是构建二叉检索树的最常用方法。

具体步骤如下:(1)将第一个结点插入到空树中,作为根结点。

(2)将后续结点依次插入到树中。

插入过程中,若当前结点的值小于根结点的值,插入到左子树上;若当前结点的值大于根结点的值,插入到右子树上。

(3)重复步骤(2),直到所有结点都插入完毕。

2.二叉树转化法二叉树转化法是一种更高效的构建方法,适用于已经存在一棵二叉树的场合。

具体步骤如下:(1)遍历二叉树,将每个结点的左子结点转化为一个新结点,并将原结点的值赋给新结点。

(2)将新结点插入到原结点的左子树上。

(3)重复步骤(2),直到所有结点都转化完毕。

三、二叉检索树的应用1.查找在二叉检索树中,查找某个结点的过程可以通过遍历树来完成。

具体步骤如下:(1)若要查找的值小于根结点的值,递归地遍历左子树。

最优二叉查找树

最优二叉查找树

最优⼆叉查找树最优⼆叉树也就是哈夫曼树,最优⼆叉树和最优⼆叉查找树是不⼀样的。

我们说⼀下他们的定义最优⼆叉树:给你n个节点,每⼀个节点有⼀个权值wi。

我们设⼀棵树的权值是所有节点的权值乘于每⼀个节点的深度,但是我们可以构造出来许多⼆叉树,我们称构造出来的那个权值最⼩的⼆叉树就是我们找的最优⼆叉树求解最优⼆叉树:(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有⼀个结点);(2) 在森林中选出两个根结点的权值最⼩的树合并,作为⼀棵新树的左、右⼦树,且新树的根结点权值为其左、右⼦树根结点权值之和;(3)从森林中删除选取的两棵树,并将新树加⼊森林;(4)重复(2)、(3)步,直到森林中只剩⼀棵树为⽌,该树即为所求得的哈夫曼树。

最优⼆叉查找树:给定n个节点的值key,假设x是⼆叉搜索树中的⼀个结点。

如果L是x的左⼦树的⼀个结点,那么L.key ≤ x.key。

如果R是x的右⼦树的⼀个结点,那么R.key ≥ x.key。

使⽤<key1,key2,key3....keyn>表⽰,且我们设定key1<key2<key3<keyn。

对于n个节点都有⼀个访问概率pi,使⽤<p1,p2,p3....pn>表⽰。

还有未找到访问点概率qi,我们使⽤<q0,q1,q2,q3....qn>表⽰。

例如访问到[-∞,key1)的概率是q0,访问到(key1,key2)的概率是q1,,,,访问到(keyn,∞)的概率是qn。

我们设定[-∞,key1)区间为d0,(key1,key2)区间为d1,,,,(keyn,∞)区间是dn。

所以是不会出现对于i,j(1<=i,j<=n)满⾜keyi==keyj的情况出现我们需要把2*n+1个节点放在⼀个⼆叉树上,其中n个节点是keyi,还有n+1个节点di。

最后形成的⼆叉树中叶节点肯定是di。

且∑n i=1pi+∑n i=0qi=1假定⼀次搜索的代价等于访问的结点数,也就是此次搜索找到的结点在⼆叉搜索树中的深度再加1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

end;
end;
14. 已知 7A个. 4节2点6 5B.147235 6C.143273 1D.544275 6173
20.已知 7个节该点 二A.叉4树6的5 2731
度为3 AD
从根至某 以 8.某结结点点 的层次: 根 9.为树第的1 深度/高 树中结点
【森林】是 m(m≥ 【二叉树 的定义二】 叉树的每
空二叉树
【满二叉 树】 深 度为i且
【完全二 叉树】满 足 1.以最下后条 一 2.层其结余点 层都充满
【二叉树 的1.性二质叉】 树的第i 2. 深度 为i的二 3. 对任 意的二叉 n0=以nn2 1 表 (1示)结度点为 总数
E K L
F
G
H M
I
J
树的凹入法表示
【树的基 本1.术结语点】 的度:
结 2.点树拥的有 度
树 3.内叶各子结 (Leaf)
度 4.为内0的部 结点/非
度 5.不孩为子0 和双亲:
结点的子
该 6.结兄点弟称 (Siblin
同 7.一祖个先双 与子孙:
度为0 度为1 KLFGMIJ CH
度为2 BE
答案如下: ①2i+1≤n ②2i+1 ③n-1 ④n-1 ⑤nk-n+1
⑥N0+N1+N2-1
⑦2N2+N1
⑧N2+2N3+3N4+…+(m-1)Nm ⑨2n-1
e3n、d求; 树 的 fu深nc度ti,o n begiifn t=nil else e4n、d二; 叉 树 pr中oc序e遍d uvarer s:array top:int begin top:=1 repeat while s[top+ top:=t end; write( if ⑥
树的指针存储结构
在结点度 为k的树
【树与森 林转换左为 子女,右
A
1. 第1个子女作为左子女 2. 其它第k个子女作为 第k-1个子女的右子女
B
CD
B
A C
E F G H IJ E F G H
树转换为二叉树
A
向右旋转
B
D IJ
E F
C HD
GI
J
B
BC
D
EF GHI J
BC
D
EF GH I J
KL
M
6、设定 二叉树的
llink key Rlink type tree=^ node= key:lo 请en补d充; 完 整1、下判面定 两 fu棵nc给ti定o n begin case (t1=nil (t1=nil else end; end;
2、求二 叉 fu树nc中ti的o n begiifn t=nil else
k-1≤log2n<k ①
A


B


D
E
C


F
G
⑧ H
⑨ ⑩⑾ ⑿ I J KL
按层次次序编号的完全二叉树
【二叉树 的一存. 顺储序】 存储

A


B


D
E
C


F
G
⑧ H
⑨ ⑩⑾ ⑿ I J KL
完全二叉树
② B ④ D
⑨ I
① A
③ C ⑥ F
⑿ L
数组元素序号 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑾ ⑿
75
7*3+5*3+4*2+2*1=46
【构造哈 夫1.曼根树据】 其给中定每的棵n 二2.叉在树FTi 二中叉选树取的两 根3.结在点F的 中 4.删除重这 复2、
75
42
7
6
54 2
11
6
5
74 2
(1)如果 以 (2线)如性果表 将 (3每)由棵哈子 因夫为曼树的 n0=n2+
【树的练 习1、】如果 有对:一如棵果有 ①
4. 具有n个结点的完全二叉树的深度为 log 2 n 1 其中 x 表示不大于x的最大整数
假设深度为k,则: 2k-1-1<n≤2k-1
2k-1≤n<2k
∵k是整数,∴k= log 2 n 1
5. 如 的右完图全所二 叉树:
((12)) 如如果i>1,则i的双亲为 i / 2
果 (32)i≤如 果2i+1
7 5 24
2*3+4*3+5*2+7*1=35
一棵哈夫曼树
18 11 7 65 42
2、设树 的度为
data child1child2… ... childk 设T是一 棵有具③有N 个结点被
3、二叉 设树二中叉,树 中的树结枝点数数 发出一个
4、如果 结一点棵,M度则 该树中共
5、所谓 严严格格二二叉叉 树共有⑨
【树的定 义】树是 (n(1)n≥有 且(仅2)有其一 余结点分
【树的表 示】
A
一棵只有 根结点的树
层次
A
1
BC
D
2
EF GHI J 3
KL
M
4
树的层次表示
A
KL E
BF
J M
HI D
G C
树的嵌套集合表示
(A(B(E(K,L),F),C(G),D(H(M),I,J))) 树的广义表表示
A B
C D
B
只有根的 二叉树
BC
D
EF GHI J
KL
M 森林
B
B
E
右子树为空 的二叉树
E
左子树为空 的二叉树
A
两棵不同的二叉树
B
C
D
E
F
G
H I J K L MN O 一棵深度为4的满二叉树
A
B
C
D
E
F
G
HI J KL 完全二叉树
(2)设树 枝 (3数)所为有 树 (4枝) 由由度 由(2()1,()3和) (4)
左子树指针
右子树指针Nil
A
A
B
B
C
D
E
F
G 二叉树的左右指针表示
C
D
E
F
G
二叉树的左、右、父指针表示
3. 后序 LRN后: 序 遍历左子
掌1.握由:前 序 2.序由列二+ 叉树得到
【树的存 储】
data child1child2… ... childk
数据 第1棵子 第2棵子 第k棵子 树指针 树指针 树指针
lchilddata rchild
左子树 数据 右子树
指针
指针
2个指针的数据结构
a
b
readln new(h p^.dat head^. end.
(二)3个 指 ty针pe的数 point= node= data:in lchild,r evanrd; head,p begin readln new(h p^.dat head^. end.
数组元素值 A B C D
F
I
L
数组元素序号 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑾ ⑿ 数组元素值 A B C D E F G H I J K L
①②③④ ⑤⑥⑦⑧
二. 链式 存(一储)2个 指 ty针pe的数 point=
node=
data:in
lchild,r
evanrd; head,p
begin
KL
M
【哈夫曼 Huff哈m夫a 曼 1.树又结叫 点的路径
森林转换为二叉树
E KF
L
C GD
H MI
J
从根 至 2.某结树点 的路径从长根 至 3.所有结结 点的带树权根 到 4.某结树点 的带权树路中 所 5.有叶哈子 夫曼树带:权 路径长度
2
4 7 52 4
7*2+5*2+2*2+4*2=36
else top:=t if ⑦ end; until end;
5、已知 二 pr叉oc树eTd u{re f{r主on程t序1, 调用形式
begiifn front1 else new(t) point: while buildtr buildtr
答案如下: ① similar(t^.llink) and similar(t^.Rlink) ② num(t^.llink)+num(t^.Rlink)+1 ③ max(depth(t^.llink),depth(t^.Rlink))+1 ④s[top]^.llink<>nil ⑤s[top]^.key ⑥s[top]:=s[top]^.rlink ⑦top>0 ⑧top=0 ⑨point:=point+1 ⑩point-front2+front1+1,rear1, point+1,rear2,t^.right
A
B
C
D
EF
G
一棵二叉树
在二叉树 的左右指
【二叉树 的遍历一】 般 1.先前左序后 NLR遍: 历 根 2.;前中序序 LNR中: 序 遍历左子
lchilddata parent rchild
左子树 数据 双亲 右子树
指针
指针 指针
3个指针的数据结构
a b
左子树指针 右子树指针Nil
父结点指针Nil
相关文档
最新文档