老师 在二叉搜索树结点的删除这一节中, 好像忘记了考虑(删除结点)的最小后继结点可能有右结点的情况
来源:5-8 二分搜索树节点的删除(Hubbard Deletion)
杏木入口
2017-10-22
89
85 91
79 88 92
86 93
87
就像删除85这个结点的时候 要将86与85结点交换 但是87是原来85的右结点
写回答
1回答
-
liuyubobobo
2017-10-22
在我们的代码:successor->right = removeMin(node->right); 这句话正确的处理了你说的情况哦:)
在你的例子里,node就是85所在的节点,successor就是86所在的节点。removeMin(node->right);这个函数将删除以88为根节点的二叉树中的最小节点,也就是86这个节点,并返回结果的根节点。这个过程里,removeMin将处理好87这个节点。也就是说,removeMin(node->right)这个函数将正确地返回这样的一棵树:
88 \ 87
之后将88这个节点赋值给86的右节点。这就是在你的例子中,执行successor->right = removeMin(node->right);的完整过程。
可以尝试用你的例子,在我们的代码中真正跑一跑,调试跟踪试试看哦:)
10
相似问题