删除二分搜索树中的任意节点,主要分为以下几种情况
1)需要删除的节点为叶子节点;
- 这种情况是最简单的,只需要切断二叉树与该叶子节点的联系即可。
2)需要删除的节点只有左子树;
- 在这种情况下,需要找到该节点的左子节点,
- 切断该节点与左孩子节点的联系、删除该节点与双亲节点的联系。
- 然后将左孩子节点代替该节点,与双亲节点相连。
3)需要删除的节点只有右子树;
- 在这种情况下,需要找到该节点的右子节点,
- 切断该节点与右孩子节点的联系、删除该节点与双亲节点的联系。
- 然后将右孩子节点代替该节点,与双亲节点相连。
4)需要删除的节点既有左子树,又有右子树;(有两种类似的方法)
- 该方法的实质就是,找到右子树中值最小的节点(或者左子树中值最大的节点),将其数据替换待删除节点的数据,然后删除右子树中值最小节点(或者左子树中值最大的节点)。
- 找到右子树中值最小的节点。然后将此节点的值赋给待删除节点。
- 删除右子树中值最小的节点。