二叉查找树:
性质:设x为二叉查找树中的一个结点。如果y是x的左子树中的一个结点,则key[x]>=key[y]。如果y是x的右子树中的一个结点,则key[x]<=key[y]。
中序遍历算法 可以按顺序输出树中的所有关键字。
因为一棵子树输出时,根的关键字介于左子树和右子树的关键字之间,前序遍历中根的关键字在其左右子树中的关键字之前输出。后序遍历中根的关键字在其左右子树中的关键字之后输出。
{
access(leftnode);
access(node);
access(rightnode);
}
最大关键字与最小关键字,根椐二叉树的性质,最小关键字是子树中沿着left指针查找,最左边的一个叶子节点。最大关键字是子树中沿着right指针查找,最右边的一个叶子节点。
根的前趋和后继:
前趋应该是小于当前根节点关键字中最大的值,后继应该是大于当前根节点关键字中最小的值。
根据二叉树的特点,当前根节点的左子树中的关键字都小于根节点关键字,右子树中的关键字都大于根节点关键字(假设关键字各不相同)。再根据最大关键字和最小关键字的特点,那么当前节点的前趋是左子树中沿right指针查找的最右边的叶子节点,后继是右子树中沿left指针查找最左边的叶子节点。
执行的基本操作时间与树的高度成正比。
插入:
比较节点左右子节点关键字,决定查找方向,直到查找节点为NULL时,这时NULL值的位置就为要插入的节点位置。
y <- NULL 用于保留当前非空节点位置
x <- root[T]
while x!=NULL
do y <- x
if key[z] < key[x]
then x <- left[x]
else x <- right[x]
p[z] <- y
if y = NULL
then root[T] <- z
else if key[z] < key[y]
then left[y] <- z
else right[y] <- z
这种插入方式会出现一个极端的情况,假设插入的关键字是有顺序的,这时会出现一棵每个节点最多有一个子节点,且都为左或是右节点的链表。
删除
分为三种情况:
1、待删除的节点(z)无子节点,直接删除就可以了
2、待删除的节点有一个子节点,只需要将其父节点和其子节点相连就可以了。
3、待删除的节点有两个节点,这时使用该节点的后继(y)代替该节点(后继节点(y)的连接应该先被删除否则其(y)父节点还会引用它,然后将关键字代替待删节点(z)的关键字,待删除的节点(z)左右节点的连接不变。)在删除后继(y)时,肯定为1,2中的一种情况。因此不会需要递归删除(如果二叉查找树中的某个结点有两个子女,则其后断没有左子女,其前趋没有右子女)。
分享到:
相关推荐
2. 基本数据结构介绍:逐一讲解数组、链表、栈和队列等基本数据结构的定义、特性及应用场景。 3. 算法与算法分析:介绍算法的基本概念,以及如何通过时间复杂度和空间复杂度来评估算法的效率。 4. 逻辑结构与物理...
在学习数据结构时,应重点理解基本数据结构的特征、实现方式、操作性能分析以及在算法设计中的选择。数据包括数据项、数据元素(作为处理的基本单位)和数据对象(相同类型数据元素的集合)。数据结构的操作主要包括...
大纲中的主题可能包括基本数据结构介绍、抽象数据类型、算法设计与分析、复杂度分析等。 3. **数据结构试验指导书.doc**: 实验指导书是实践操作的关键,它通常会列出一系列实验任务,这些任务可能涉及实现和分析...
1. **基本数据结构介绍**:课程首先会介绍几种基础的数据结构,包括数组、链表、栈和队列。数组是最简单的数据结构,允许你存储相同类型的元素集合,并通过索引访问。链表则是一种动态数据结构,每个元素(节点)...
文档通过深入分析四种基本数据存储类型,探讨了它们在数据结构设计中的作用以及如何根据数据结构的特点选择最合适的存储类型。每个存储类型都有其特定的应用场景,而对这些存储类型的深入理解对于高效设计数据结构和...
数据结构》(C语言版)的第1章综述数据、数据结构和抽象数据类型等基本概念;第2章至第7章从抽象数据类型的角度,分别讨论线性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用;第8...
本书的第1章综述数据、数据结构和抽象数据类型等基本概念;第2章至第7章从抽象数据类型的角度,分别讨论线性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用;第8章综合介绍操作系统...
例如,他将介绍如何通过递归和迭代算法实现二叉树的遍历,如何设计高效的排序算法(如快速排序、归并排序),以及如何利用堆数据结构实现优先队列等。同时,教材还将涉及动态规划、贪心策略等高级算法思想,帮助学生...
1. **基本概念**:首先,PPT可能会介绍数据结构的基本概念,如数据、数据元素、数据对象、数据结构的定义,以及数据结构的分类,包括线性结构、非线性结构(如树形结构和图结构)等。 2. **线性结构**:线性结构...
本资源为数据结构第二版,使用面向对象方法和C语言描述,作者殷人昆详细介绍了数据结构的编程需要。本资源提供了数据结构的基本概念、数据结构的类型、数据结构的操作等知识点。 数据结构的基本概念: 数据结构是...
根据数据元素间关系的不同特性,通常有下列四类... 从上面所介绍的数据结构的概念中可以知道,一个数据结构有两个要素。一个是数据元素的集合,另一个是关系的集合。在形式上,数据结构通常可以采用一个二元组来表示。
严蔚敏教授的《数据结构》是一本经典的教材,深入浅出地介绍了各种数据结构及其算法。"严蔚敏数据结构动态演示"正是基于这本书的内容,通过动态的方式帮助学习者更直观地理解数据结构。 首先,我们来看一下数据结构...
1. **基本概念**:首先会介绍数据结构的基本概念,包括什么是数据结构,数据结构的重要性,以及数据结构与算法的关系。数据结构是存储和组织数据的方式,如数组、链表、栈、队列等,而算法则是操作这些数据结构的...
在“数据结构课程介绍及计算机原理简介”中,我们主要会探讨以下几个方面: 1. 数据结构的基本概念:数据结构是组织、存储和处理数据的特定方式。它不仅包括数据的物理形式,也包括数据之间的逻辑关系。了解数据...
数组是最基本的数据结构,它提供了通过索引访问元素的能力;链表则允许动态地改变元素的位置,而无需移动物理存储位置。栈是一种后进先出(LIFO)的数据结构,常用于表达式求值和递归;队列则是先进先出(FIFO)的...
李春葆教授的数据结构教程是一本广泛使用的教材,它深入浅出地介绍了这一领域的基本概念和算法。在这个教程中,读者将接触到各种类型的数据结构,如数组、链表、栈、队列、树、图以及散列表等,这些数据结构在实际...
唐发根教授的数据结构教程是一部深受初学者欢迎的教材,它全面且深入地介绍了数据结构的基本概念、算法和应用。下面我们将详细探讨其中的知识点。 1. **基本概念**:首先,你需要理解什么是数据结构。数据结构是...
1. **绪论**:通常会介绍数据结构的基本概念,以及为什么在编程中学习数据结构至关重要。它可能还会讲解数据结构与算法之间的关系,以及它们在软件设计和问题解决中的作用。 2. **线性数据结构**:包括数组、链表、...
1. **基本概念**:首先,笔记可能会定义数据结构的基本概念,如什么是数据、数据元素、数据对象、数据结构和抽象数据类型(ADT)。它会解释数据结构是如何组织和存储数据的,以及如何通过不同的方式访问和操作这些...