Binary Sort Tree 定义:
或者是一棵空树,或者是具有下列性质的二叉树:
1、若左子树不空,则左子树上所有节点的值均小于根节点的值;
2、若右子树不空,则右子树上所有节点的值均大于根节点的值;
3、左右子树分别是二叉排序树
查找操作 : 递归进行查找, 示意图如下:
插入操作:进行查找操作,记录下最后访问的节点,作为新增节点的父节点,示意图如下:
构建操作:若干次插入操作
删除操作:分三种情况
1、其左右节点为null,直接删除
2、其左节点或右节点非null,删除并移动其左节点或右节点
3、其左节点和右节点均非null,可以用该节点中序遍历时的直接前驱节点代替。
编程实现需要三个指针: p 待删除节点; q 待删除节点的中序遍历前驱结点; s 记录q的前驱节点
初始化:p 通过查找操作获得; s = p; q = p.left.
搜索q:
while ( q . right != null )
{ s = q ; q = q.rght; }
删除p: 通过改变key值
p . key = q . key;
重建新链接:
if ( s == p ) { p. left = q . left; } (情景1)
else { s . right = q.left; } (情景2)
释放q :
free (q);
情景 1:
情景 2: