一、定义
二叉查找树(Binary Search Tree):二叉查找树或者是空树,或者是满足如下性质的二叉树:
- 若它的左子树非空,则左子树上所有结点的值均小于根结点的值;
- 若它的右子树非空,则右子树上所有结点的值均大于根结点的值;
- 左、右子树本身又各是一棵二叉查找树。
上述性质简称二叉查找树性质(BST性质),故二叉查找树实际上是满足BST性质的二叉树。
根据BST的性质,有一些推论
- 二叉查找树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字;
- 二叉查找树中,各结点关键字是惟一的;
- 按中序遍历该树所得到的中序序列是一个递增有序序列。
二、基本操作
二叉查找树T有三种基本的操作:查找、插入、删除。
查找节点X
- 如果T为空,就返回false;
- 如果X等于当前节点项,返回true;
- 否则,如果X小于当前节点项,则递归查找其左子树;如果X大于当前节点项,则递归查找其右子树;
插入节点X
- 如果找到X,则什么都不用做;
- 否则将节点X插入到遍历的路径上的最后一点上。
删除节点X
- 如果节点X是叶子节点,则直接删除;
- 如果节点X只有一个儿子,则删除节点X,并用它的儿子来代替它的位置;
- 如果节点X有两个儿子,则用其右子树的最小的数据代替该节点的数据并递归地删除那个节点。