您的位置:首页 > 其它

二叉排序树删除结点

2016-06-14 12:17 309 查看
最后,要删除一个左右子树都不为空的节点中的元素,只需将该元素替换为它的左子树中的最大元素或右子树中的最小元素。假设希望删除图 11-4a 中关键值为4 0的元素,那么既可以
用它左子树中的最大元素( 3 5 ),也可以用它右子树中的最小元素(6 0)来替换它。如果选择右
子树中的最小元素,那么把关键值为6 0的元素移到4 0被删除的位置,再把原来的叶节点6 0删除
即可。结果如图11-4b 所示。
假定用左子树中的最大元素来代替被删除的元素4 0。左子树中的最大元素是3 5,且只有一
个子女,把3 5移到4 0的节点中,将其左孩子指向原来节点3 5的唯一子女,结果如图11-4c 所示。
再来看另一个例子,删除图11-4c 中的节点3 0。既可以用5,也可以用3 1来替换节点3 0。如
果选用5,而5是只有一个孩子的节点,那么只要把其左孩子域指向 5原来的唯一子女即可,结
3 2 4 第二部分 数 据 结 构
下载果如图11-4d 所示。如果选用3 1替换3 0,而原来的3 1是树叶节点,那么只需删除该树叶节点。
 

                                 图11-4   二叉搜索树中元素的删除
注意, 必须确保右子树中的最小元素以及左子树中的最大元素既不会在没有子树的节点中,
也不会在只有一个子树的节点中。可以按下述方法来查找到左子树中的最大元素:首先移动到
子树的根,然后沿着各节点的右孩子指针移动,直到右孩子指针为 0为止。类似地,也可以找
到右子树中的最小元素:首先移动到子树的根,然后沿着各节点的左孩子指针移动,直到左孩
子指针为0为止。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: