本博客是用二叉排序树实现map的查找操作。
一:二叉排序树的性质:
(1)若它的左子树非空,则其左子树所有结点的关键字的值均小于其根结点的关键字值。
(2)若它的右子树非空,则其右子树所有结点的关键字的值均大于其根结点关键字的值。
(3)它的左右子树也分别为一棵二叉排序树。
二:二叉树的插入和建立
基本思想:(1)若二叉树为空,则新结点作为二叉排序树的根节点。
(2)若给定结点的关键字的值小于根节点关键字的值,则插入到左子树中。
(3)若给定结点的关键字的值大于根节点关键字的值,则插入到右子树中。
三:二叉树的删除(删除结点后还要保留二叉树的性质)
假设待删除的结点为*p(指向结点的指针为p),假设指针f指向结点*p的双亲,s指向结点*p的左子树中关键字值最大的结点,q指向*s的双亲。
(1)当*p为叶子结点时,即左右子树均为空。
由于删除叶子结点不破坏整棵树的结构,则值需将其双亲结点*f的lchild或rchild置空即可,然后删除结点。
(2)当*p结点只有一颗非空子树,或者是非空左子树,或者是非空右子树。
若*p结点只有右子树而无左子树,则用其右子树的根节点取代要删除的*p结点。
若*p结点只有左子树而无右子树,则用其左子树的根节点取代要删除的*p结点。
(3)当*p结点的左右子树均为空。
由图(a)可知,在