二叉查找树:
性质:设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中的一种情况。因此不会需要递归删除(如果二叉查找树中的某个结点有两个子女,则其后断没有左子女,其前趋没有右子女)。
分享到:
相关推荐
数据结构》(C语言版)的第1章综述数据、数据结构和抽象数据类型等基本概念;第2章至第7章从抽象数据类型的角度,分别讨论线性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用;第8...
根据数据元素间关系的不同特性,通常有下列四类... 从上面所介绍的数据结构的概念中可以知道,一个数据结构有两个要素。一个是数据元素的集合,另一个是关系的集合。在形式上,数据结构通常可以采用一个二元组来表示。
第二章 ~ 第七章 基本数据结构 从抽象数据类型的角度, 分别讨论线性表、栈和队列、串、数组和广义表、 树、图等基本数据结构及其应用。 第八章 动态存储管理 介绍操作系统和编译程序中涉及的 动态存储管理的...
本书和传统同类书籍的区别是除了介绍基本的数据结构容器如栈、队列、链表、树、二二义 树、红黑树、AV L树和图之外,引进了多任务:还介绍了将任意数据结构容器变成支持多任务 的方法:另外,还增加了复合数据结构和...
数据结构与算法大全,介绍很多算法,从基本内容开始,详细介绍数据结构的四大基本结构:线性结构、图、树、网等
本书的目的是从抽象思维和问题求解的观点提供对数据结构的实用介绍,试图包含有关数据结构、算法分析及其Java实现的所有重要的细节。作者采用了独特的方法将数据结构分成说明和实现两部分,并充分利用了已有的数据...
本书分为基本概念、简单数据结构(线性表、栈、队列)、复杂数据结构(树、图)和算法与数据结构应用(排序、查找、算法设计基础)四部分,详细介绍了常用数据结构和算法的基本概念及其不同的实现方法,对各种数据...
20页word文档介绍一些关于数据结构的基本知识 链表 队列 树
"本书重点讨论了各种基本数据结构的类型描述、常用算法实现及其应用。全书共分9章:第1章主要介绍了有关数据结构的基本概念和术语;第2章~第7章分别讨论了线性表、栈和队列、串、数组和广义表、树及图等基本类型的...
《数据结构与算法设计》以基本数据结构为知识单元,系统地介绍数据结构知识与应用、计算机算法的设计与分析方法。全书共分13章,第1章介绍数据结构、抽象数据类型和算法的基本概念;第2~4章以抽象数据类型为主线索...
本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;...
在介绍数据结构的基本运算时,不仅介绍了算法思想,更注意程序的实现过程;源程序都经过上机验证,正确率高;每章最后都配备了大量的习题,并在附录中给出了详细的习题答案,使学生能够深化对基本概念的理解,提高...
详细介绍Python中的基本数据结构,包括列表、元组、字符串、集合、字典等,重点分析这些结构之间的联系与区别,适用的场景,通过具体示例演示常见方法的使用,非常适合高校教师教学和学生课后复习。
1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。“数据结构”在计算机科学中是一门综合...
本书的目的是从抽象思维和问题求解的观点提供对数据结构的实用介绍,试图包含有关数据结构、算法分析及其Java实现的所有重要的细节。作者采用了独特的方法将数据结构分成说明和实现两部分,并充分利用了已有的数据...
《数据结构与算法C#语言描述》介绍的方法非常实用,采用了时间测试而非大O表示法来分析算法性能。内容涵盖了数据结构和算法的基本原理,涉及数组、广义表、链表、散列表、树、图、排序搜索算法以及更多概率算法和...
《数据结构导论》系统地介绍了各种常用的数据结构,对基本概念、基本原理和基本方法做了深入浅出的介绍,对有关的算法设计做了详细和通俗的讲解,并对有关背景做了适当交待。每章附带小结和适量的习题。上述特点使...
OLAP基本概念,数据分析模型,多维数据结构
JavaScript初学者应该看,介绍了JavaScript的基本数据类型和基本语法知识。如果想系统学JavaScript的话这个不行。知识简单的让你有个了解,可以让你读懂JavaScript。
——加菲劳 《数据结构与算法分析》 ――课程内容体系主要内容 教学单元模块 具体教学内容 绪论 绪论部分是全书的预备知识,主要对ADL语言、数据结构与算法、算法分析基础、OOP、和C++做了简单介绍 基本数据结构 ...