其他分享
首页 > 其他分享> > 二叉排序树

二叉排序树

作者:互联网

1.编写SearchBST(T,key),InsertBST(T,key)伪代码与实现

2.编写CreateBST(T)的伪代码与实现

3.编写DeleteBST(T,key)伪代码

4.代码实现DeleteBST(T,key)

int DeleteBST(BSTNode* T, KeyType key)
{	
    /* 若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素节点 */
    /* 并返回TRUE;否则返回FALSE */
    if (!T)		
        return false;	
    /* 不存在关键字等于key的数据元素 */	
    else 
    { 
        if (key == T->key)	
            Deletel(T);	
        else if (key < T->key)	
            return DeleteBST(T->lchild, key);	
        else	
            return DeleteBST(T->rchild, key); 
    } 
}
int Deletel(BSTNode* p)//从二叉排序树中删除节点p, 并重接它的左或右子树
{	
    BSTNode *q, *s;
    if
        (!p->lchild && !p->rchild)	// p为叶子节点 	
        p = NULL;	else if (!p->lchild)	// 左子树为空,重接右子树
    { 
        q = p;		
        p = p->rchild;		
        delete q;
    } 
        else if
        (p->rchild)	// 右子树为空,重接左子树 
    {
        q = p;	
        p = p->lchild;		
    delete q; 
    }
        else						// 左右子树均不为空 
    { 
        q = p;	
        s = p->lchild;	
        while (s->rchild)		// 转左,向右走到尽头
        {
            q = s;		
            s = s->rchild;
        }	
        p->key = s->key;	
        if (q != p)		   //判断是否执行上述while循环 
            q->rchild = s->lchild;	// 执行上述while循环,重接右子树
        else	
            q->lchild = s->lchild;	// 未执行上述while循环,重接左子树	
        delete s;
    }	
    return true;
}

明天早上看可以吗(╥ω╥`) 非常感谢!!!!!

标签:lchild,二叉,return,else,key,BSTNode,rchild,排序
来源: https://www.cnblogs.com/599-/p/12734027.html