二叉排序樹(一)

1、概念

二叉排序樹(Binary Sort Tree):又稱二叉查找樹。 它或者是一棵空樹;或者是具有下列性質的二叉樹:

(1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;

(2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;

(3)左、右子樹也分別爲二叉排序樹;

2.二叉排序樹查找操作 code

/*二叉樹的二叉鏈表結點結構定義*/
typeof struct BiTNode    /*結點結構*/
{
    int data;    /*結點數據*/
    starct BiTNode *lchild,*rchild;     /*左右孩子指針*/
}BiTNode,*BiTree;

/*遞歸查找二叉排序樹T中是否存在key*/
/*指針f指向T的雙親,其其初始調用值爲NULL*/
/*若查找成功,則指針p指向該數據元素結點,並返回TRUE*/
/*否則指針p指向查找路徑上訪問的最後一個結點並返回FALSE*/
Status SearchBST(BiTree T,int key,BiTree f,BiTree *p)
{
    if(!T)    /*查找不成功*/
    {
        *p=f;
        return FALSE;
    }
    else if(key==T->data)    /*查找成功*/
    {
        *p=T;
        return TRUE;
    }
    else if(key<T->data)
        return SearchBST(T->lchild,key,T,p);    /*在左子樹繼續查找*/
    else
        return SearchBST(T->rchild,key,T,p);    /*在右子樹繼續查找*/
}

3.二叉排序樹插入操作 

(1)構造過程:

(2)code

/*當二叉排序樹T中不存在關鍵字等於key的數據元素時,插入key並返回TRUE,否則返回FALSE*/
Status InsertBST(BiTree *T,int key)
{
    BiTree p,s;
    if(!SearchBST(*T,key,NULL,&p)    /*查找不成功*/
    {
        s=(BiTree)malloc(sizeof(BiTNode));
        s->data=key;
        s->lchild=s->rchild=NULL;
        if(!p)
            *T=s;    /*插入s爲新的根節點*/
        else if(key<p->data)
            p->lchild=s;    /*插入s爲左孩子*/
        else
            p->rchild=s;    /*插入s爲右孩子*/
        return TRUE;
    }
    else
        return FALSE;    /*樹種已有關鍵字相同的結點,不再插入*/
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章