动态管理集合的数据结构——二叉搜索树

搜索树是一种可以进行插入,搜索,删除等操作的数据结构,可以用字典或者优先队列。
二叉排序树又称为二叉查找树,他或者为空树,或者是满足如下性质的二叉树。
(1)若它的左子树非空,则左子树上所有结点的值均小于根结点的值。
(2)若它的右子树非空,则右子树上所有结点的值均大于根结点的值。
(3)它的左、右子树本身又各是一棵二叉排序树。
对于二叉排序树进行中序遍历可以得到按结点值递增排序的结点序列。
--------------------------------------------------------------------------------------
二叉排序树用的头文件
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
typedef struct node
{
int data;
node *lchild,*rchild;
}bsnode;
--------------------------------------------------------------------------------------
一、二叉搜索树——插入
假设待插入的数据元素是x。
1.1第一种情况
root为空,直接插入,让它成为根结点。

1.2第二种情况
要插入的元素已经存在,则无需插入。
1.3第三种情况
若x小于根结点的关键字,则将该结点插入该树的左子树中,否则则将该结点插入该树的右子树中。

伪代码:
insert(T, z)
y = NIL // parent of x
x = 'the root of T'
while x ≠ NIL
y = x // set the parent
if z.key < x.key
x = x.left // move to the left child
else
x = x.right // move to the right child
z.p = y
if y == NIL // T is empty
'the root of T' = z
else if z.key < y.key
y.left = z // z is the left child of y
else
y.right = z // z is the right child of y
现学现用
1、Binary Search Tree I

本文介绍了二叉搜索树的基本概念和性质,包括如何进行插入操作,中序遍历得到有序序列。详细阐述了插入的三种情况,并提供了现学现用的题目实践。接着讲解了查找操作的实现原理,最后讨论了删除节点的四种情况,特别是有左右子树时的处理策略。附带了具体实例和在线编程挑战链接。
 小结&spm=1001.2101.3001.5002&articleId=86553987&d=1&t=3&u=7d4ebf914a184861b251732236f4c279)
206

被折叠的 条评论
为什么被折叠?



