动态管理集合的数据结构——二叉搜索树
搜索树是一种可以进行插入,搜索,删除等操作的数据结构,可以用字典或者优先队列。
二叉排序树又称为二叉查找树,他或者为空树,或者是满足如下性质的二叉树。
(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