华电北风吹
天津大学认知计算与应用重点实验室
日期:2015/9/9
与散列表一样,搜索树数据结构也支持动态集合操作,包含插入,查询,删除,最小值,最大值,前驱,后继等。
一、二叉搜索树:
二叉搜索树节点:关键字key,卫星数据,左孩子指针,右孩子指针,父节点指针,其他特殊类型(红黑树的节点颜色,AVL树的树高等)。
二叉搜索树性质:x是二叉搜索树中的任意一个节点。若y是x左子树中任意一个节点有x.key>=y.key。若y是x右子树中任意一个节点有x.key<=y.key。
二、二叉搜索树的遍历
前序遍历:根节点+左子树+右子树
中序遍历:左子树+根节点+右子树
后序遍历:左子树+右子树+根节点
三、二叉搜索树的查询
1、查询给定关键字
根据二叉搜索树的性质查询即可。
2、最大关键字元素
寻找右子树的右子树,直到右子树没有右子树。
3、最小关键字元素
寻找左子树的左子树,直到左子树没有左子树。
4、给定节点的前驱(中序遍历)
分两种情况:1、若当前节点有左子树,寻找左子树的最大关键字元素,即为当前节点的前驱。2、若当前节点没有左子树,判断当前节点是否是父节点的左子树,若是则对父节点进行此判断,知道出现判断节点是父节点的右子树,返回判断节点的父节点。
5、给定节点的后继(中序遍历)
分两种情况:1、若当前节点有右子树,寻找右子树的最小关键字元素。2、若当前节点没有右子树,若当前节点是父节点的右子树,则对父节点进行此判断,直至出现判断节点是父节点的左子树,返回判断节点的父节点。
四、二叉搜索树的插入
根据二叉搜索树的性质插入即可。
五、二叉搜索树的删除
分三种情况:
1、需要删除的节点没有子树。单纯的删除即可。
2、需要删除的节点只有一个子树。只需要将当前节点的子树替换当前节点即可。
3、需要删除的节点有左右子树。将当前节点的后继节点(右子树的最小关键字元素)替换到当前节点,这时结构上相当于删除了当前节点的后继节点,由于最小关键字元素肯定没有左子树,对后继节点处利用性质1即可。
版权声明:本文为博主原创文章,未经博主允许不得转载。经过博主允许后转载的,必须全文转载,并且显著位置说明转载日期和来源链接。