搜索二叉树的插入函数:
从根结点去寻找要插入的结点,如果值相等,则插入失败返回;如果key小于结点值则向左走,如果大于则向右走,直到按这个规则到达树叶子结点,则为插入的位置,然后new出这个结点插入.
搜索二叉树的删除:
先是从根开始去寻找要删除的结点(从根遍历如果值相等的找到,如果小与则向左寻找,如果大于则向右寻找),找到后执行删除动作,分为两种大的情况:
1.要删除的结点既有左边孩子又有右边孩子,这种情况直接删除不好操作,则将问题转化, 因为该结点的值是介于左树最大结点值和右树最小结点的值之间所以我们可以将 左子树中最大结点或者右树里最小结点来替该结点,然后去删除左子树中最大结点或者右树里最小结点. 具体操作是在左子树里查找最大的结点或者在右子树里查找最小的结点,找到后将该结点的值去替换要删除的结点得值,然后问题转化为删除左树最大的结点或者右树最小的结点,然后去删除相应的结点,这个结点一般最多是只有一个子树,所以比较好删除.
2.要删除的结点只有一个孩子,只有左孩子或者只有右孩子,或者没有孩子自己为叶子结点.这种和上面的第1种情况最终转化到的结果是一样的.只要将仅有的一个孩子提上去就行,或者没有孩子时将NULL提上去就行.