二叉排序树就是左子树的数字比树根小,右子树的数字比树根大的一颗二叉树。
插入一个结点到这样的树里很简单。
首先比它和根谁大,大往右找插入位置,小往左找插入位置。
到了子树继续比和根谁大,如果大就往右找,如果小就往左找,这样递归到某个子树的根没有左子树或者右子树,如果小,就插在左子树上,如果大就插在右子树上。
删的话有一点点麻烦:
1,如果你要删的结点是叶子,那很好办,直接删了就行了。
2,如果你要删的结点只有左子树或者右子树,那也很好办,把这个结点删了之后比它的子树挂父亲结点上空出来那个位置就行了。
证明:如果被删除结点是父亲的左孩子,那么被删除结点小于父亲,且被删除结点的全部子树都小于父亲(如果有大于父亲的子树结点,那么在插入的时候就应该被挂在父亲的右子树上,而不是被删除结点的子树上),因此把相应子树都挂在父亲的左孩子就行了。同理右子树是都大于,于是只要把被删除结点的子树挂父亲上,顶替它原来的位置就行了。
注意:这个是说被删除结点只有一颗子树的情况。
3,被删除的结点两个子树都有,这个有一点点麻烦,被删除结点的左子树很好办,它可以顶替被删除结点在其父结点中的位置,但是右子树怎么办?我们将右子树整体看作是一个结点,由于右子树比被删除结点大,于是右子树比整个被删除结点的左子树要大,于是右子树应该插入在左子树的右边,再将左子树看作一个整体,于是右子树的插入位置就是左子树的右下角。
本文深入解析二叉排序树的基本概念,并详细阐述如何进行元素的插入与删除操作,包括针对不同情况的具体步骤与证明。

被折叠的 条评论
为什么被折叠?



