设为首页 加入收藏

TOP

算法导论-二叉排序树(五)
2012-11-17 09:26:13 来源: 作者: 【 】 浏览:2472
Tags:算法 导论 排序

 

    //实际删除的是待删节点的直接后继,下面是删除直接后继的过程,(待删结点至多只有一个儿子, 有两个会转化为0个或1个右结点)

    待删结点是根结点 */

    if (NULL == parent)

    {

    *tree = child;

    }

    else

    {

    /*待删结点是父亲结点的左儿子*/

    if (parent->lchild == p)

    {

    parent->lchild = child;

    }

    else

    {

    parent->rchild = child;

    }

    //将实际删除的节点的key值赋给原先要删除的节点

    if (p != q)

    {

    q->key = p->key;

    }

    }

    free(p);

    return 0;

    }

    //二叉排序树查找

    BSTNode* SearchBST(BSTree *T,KeyType key)

    { //在二叉排序树T上查找关键字为key的结点,成功时返回该结点位置,否则返回NUll

    if(T==NULL) //递归的终结条件

    return NULL; //T为空,查找失败;

    if(key==T->key)

    //成功,返回找到的结点位置

    {

    printf("Got it!");

    return T;

    }

    if(key<T->key)

    return SearchBST(T->lchild,key);

    else

    return SearchBST(T->rchild,key);//继续在右子树中查找

    } //SearchBST

    int main()

    {

    int n;

    BSTree *B=NULL;

    printf("Input number to initialize a BSTree:");

    while(1)

    {

    scanf("%d",&n);

    if(n==0) break;

    InsertNode(&B, n);

    }

    dispTree(B);

    printf("PreOrder:");

    preOrder(B);

    printf("\n");

    printf("Search a node:");

    scanf("%d",&n);

    SearchBST(B,n);

    printf("\n");

    printf("Delete a node:");

    scanf("%d",&n);

    delNode(&B,n);

    dispTree(B);

    printf("PreOrder:");

    preOrder(B);

    printf("\n");

    return 1;

    }

    运行结果:

            

首页 上一页 2 3 4 5 6 7 8 下一页 尾页 5/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇求区间内小于num的数的个数 下一篇C++中私有继承和公有继承的特点

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: