码迷,mamicode.com
首页 > 其他好文 > 详细

二叉查找树的Insert和Delete操作

时间:2015-08-26 15:47:16      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
struct TreeNode{
    SearchTree Left;
    SearchTree Right;
    ElementType Ele;
};
/*递归一定有出口*/
/*递归代码就是要重复使用*/
SearchTree
Insert( SearchTree T, X )
{
    /*这个是对树中没有该参数,增加节点*/
    if( T == NULL )
    {
        T = malloc( sizeof( struct TreeNode ) );
        if( T == NULL )
            fatalError();
        T->Ele = X;
        T->Left = NULL;
        T->Right = NULL:
    }
    /*继续比较*/
    else
    if(T->Ele > X )
        T->Left = Insert( T->Left, X );//对于没有左子节点,返回新建节点指针,若有,在递归返回时,则相当于什么都没做
    else
    if( T->Ele < X )
        T->Right = Insert( T->Right, X );

    return T;
}

SearchTree
FindMin(SearchTree T )
{
    if(T == NULL)
        return NULL;//只针对第一次
    if( T->Left != NULL )
        return FindMin( T->Left );
    return T;
}

//二叉查找树的删除例程
SearchTree
Delete( SearchTree T, ElementType X )
{
    S earchTree TmpCell;
    if( T == NULL )
        Error("no Element found");
    if( T->Ele > X )
        T->Left = Delete( T->Left, X );
    else if( T->Ele < X )
        Delete( T->Right, X );
    else if( T->Right && T->Left )
    {
        TmpCell = FindMin(T->Right);
        T->Ele = TmpCell->Ele;
        Delete( TmpCell, T->Ele );
    }
    else//供给1.删除只有一个或没有儿子的父节点2.删除右子树最小节点
    {
        if( T->Left == NULL )
            T = T->Right;
        else if(T->Right == NULL )
            T = T->Left;
    }
    return T;
}
View Code

 

二叉查找树的Insert和Delete操作

标签:

原文地址:http://www.cnblogs.com/gabygoole/p/4760231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!