二叉排序树删除节点
二叉排序树,是非常特殊的一种树,具体定义见任何一本数据结构书籍。
其删除一个节点需要考虑对应节点的状态,具体的说就是,是否存在左右节点,等等。需要按照以下情况讨论。
1.查找待删除节点,在查找的同时需要记录一下待删除节点的父亲。
2.如果待删除节点的左右节点都不存在,那么直接删除。
3.如果待删除节点左子树存在右子树不存在,或者左子树不存在右子树存在。直接将其子树中存在的一边候补上来即可。
4.如果待删除节点左右子树都在,这个情况是最复杂的。需要按照二叉排序树的性质从其左子树或者有子树中选择节点补到待删除节点的位置。
如果从左子树中选,就应该选择左子树中最右边的那个叶子节点(这里肯定是叶子,如果不是叶子,那么就不是最右边的节点)
如果从右子树中选,就应该选择有子树中最左边的那个叶子节点。
具体代码如下: