Skip to content

Latest commit

 

History

History

README.rst

Binary Search Tree二叉搜索树

在二叉树的基础上,增加了以下限制条件的二叉树:

  • 结点左子树上的所有结点都小于等于该结点
  • 结点右子树上的所有结点都大于等于该结点

删除

1 若要删除的结点是叶子结点,直接将结点从树中移除即可:

       50                            50
    /     \         delete(20)      /   \
   30      70       --------->    30     70
  /  \    /  \                     \    /  \
20   40  60   80                   40  60   80

2 若要删除的结点只有一个子结点,将子结点中的所有数据(包括子结点信息)复制到该结点中,并移除子结点:

    50                            50
 /     \         delete(30)      /   \
30      70       --------->    40     70
  \    /  \                          /  \
  40  60   80                       60   80

3 若要删除的结点有两个子结点,则找出该结点的中序遍历中的后继,将其所有数据(包括子结点信息)复制到该结点中,并移除后继结点(其实用中序遍历的前趋结点也可以):

    50                            60
 /     \         delete(50)      /   \
40      70       --------->    40    70
       /  \                            \
      60   80                           80

通常我们寻找一个结点的后继时,若该结点没有右子树,则需要向上回溯。但第3种情况种,我们可以肯定要删除的结点必定有右子树,因此完全不需要回溯。