BST特点
在二叉查找树中:
(1) 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2) 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3) 任意节点的左、右子树也分别为二叉查找树。
(4) 没有键值相等的节点(no duplicate nodes)。
找前驱和后继节点
BST中某节点前驱节点==小于该节点的所有节点中的最大值
前驱容易情形:5寻前驱 4
前驱复杂情形:11寻前驱 10
BST中某节点后继节点==大于该节点的所有节点中的最小值
后继容易情形:5寻后继 6
复杂情形:9寻后继 10
二叉树的插入
a.若当前的二叉查找树为空,则插入的元素为根节点
b.若插入的元素值小于根节点值,则将元素插入到左子树中
c.若插入的元素值不小于根节点值,则将元素插入到右子树中。首先找到插入的位置,要么向左,要么向右,直到找到空结点,即为插入位置,如果找到了相同值的结点,插入失败。
二叉查找树的删除
分三种情况进行处理:
1.p为叶子节点,直接删除该节点,再修改其父节点的指针(注意分是根节点和不是根节点),如图a。
2.p为单支节点(即只有左子树或右子树)。让p的子树与p的父亲节点相连,删除p即可;(注意分是根节点和不是根节点);如图b。
3.有两个孩子的情况,当前结点与左子树中最大的元素交换,然后删除当前结点。左子树最大的元素一定是叶子结点,交换后,当前结点即为叶子结点,删除参考没有孩子的情况。另一种方法是,当前结点与右子树中最小的元素交换,然后删除当前结点。如图c。
1 |
|