二叉排序树
1.什么是二叉排序树
2.二叉排序树的特点
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)二叉排序树也可以是一个空树;
3.二叉排序树的查找
(2)否则,若小于根结点的关键字值,递归查左子树。
(3)若大于根结点的关键字值,递归查右子树。
P(n)=O(logn)
3.二叉排序树的插入
(1)首先执行查找算法,找出被插结点的父亲结点。
(2)判断被插结点是其父亲结点的左、右儿子。将被插结点作为叶子结点插入。
(3)若二叉树为空。则首先单独生成根结点。
注意:新插入的结点总是叶子结点。
3.二叉排序树的删除
其删除一个节点需要考虑对应节点的状态,具体的说就是,是否存在左右节点,等等。需要按照以下情况讨论。
(1)查找待删除节点,在查找的同时需要记录一下待删除节点的父亲。
(2)如果待删除节点的左右节点都不存在,那么直接删除。
(3)如果待删除节点左子树存在右子树不存在,或者左子树不存在右子树存在。直接将其子树中存在的一边候补上来即可。
(4)如果待删除节点左右子树都在,这个情况是最复杂的。需要按照二叉排序树的性质从其左子树或者有子树中选择节点补到待删除节点的位置。
如果从左子树中选,就应该选择左子树中最右边的那个叶子节点(这里肯定是叶子,如果不是叶子,那么就不是最右边的节点)
如果从右子树中选,就应该选择有子树中最左边的那个叶子节点。