二叉排序树剔除操作

二叉排序树删除操作二叉排序树上被删除结点* p,其双亲结点为* f,可设*p为*f的左孩子:1、*p结点为叶子结点,

二叉排序树删除操作


  二叉排序树上被删除结点* p,其双亲结点为* f,可设*p为*f的左孩子:

  1、*p结点为叶子结点,删除不影响整棵树的结构,只要修改双亲结点的指针。

  2、*p只有左子树或者右子树,删除*p结点,只需令*p的左子树或者右子树直接成为其双亲结点的左子树即可。



  如果(2)中*p的左孩子或者右孩子比双亲结点大呢?不就破坏了树的有序序列吗?

  书中举得列子是中序遍历,比结点小就是左孩子,大就是右孩子。

[解决办法]
根据二叉排序树的定义,一个结点p,对于任意一个位于p的左子树上的结点l,有key[l]<=key[p]。对于任意一个位于p的右子树上的结点r,有key[r]>=key[p]。
所以,以p为根的子树上所有结点的值都小于或等于key[f]
[解决办法]
嗯,ls正解