二叉排序樹查找算法代碼


什么是二叉排序樹:首先是一棵二叉樹,或者為空,或者滿足以下條件:

1,左子樹不空,所有左子樹值都小於根節點;

2,右子樹不空,所有右子樹值都大於根節點;

3,根節點的左右子樹也是二叉排序樹。

二叉排序樹(二叉鏈表),中序遍歷二叉排序樹即可變成有序數列。(無序數列通過構建二叉排序樹成有序序列)

寫一個二叉排序樹的類,里面應該有成員函數:獲取根結點中序遍歷遞歸查找;迭代查找;插入元素;最大值;最小值;查找前驅結點;查找后繼結點;用結點 nodeM 替換結點 nodeN;刪除結點是key的元素等等。

一般對二叉排序樹的操作:創建;插入(遞歸);刪除;搜索(遞歸)。

代碼:

#include <iostream>
using namespace std;

typedef struct BSTNode
{
    int data;
    struct BSTNode *lTree,*rTree;
}BSTNode,*BSTree;

//遞歸實現二叉排序樹的插入操作
void InsertBST(BSTree &BT,BSTNode *BN)
{
    if(BT==NULL)
        BT=BN;
    else if(BT->data > BN->data)
        InsertBST(BT->lTree,BN);
    else
        InsertBST(BT->rTree,BN);
}

//刪除操作
//判斷它屬於哪種類型
//1、葉子節點。
//2、只有左子樹或者只有右子樹。
//3、既有左子樹,又有右子樹。
bool deleteBST(BSTree &BT,BSTNode *BN)
{
    BSTNode* tmp;
    if(BN->lTree == NULL && BN->rTree == NULL)
        delete BN;
    else if(BN->lTree == NULL)
    {
        tmp=BN;
        BN=BN->rTree;
        delete tmp;
    }    
    else if(BN->rTree == NULL)
    {
        tmp=BN;
        BN=BN->lTree;
        delete tmp;
    }    
    else
    {
        tmp=BN;
        BSTNode * s = BN->lTree;
        while (s->rTree) 
        { 
            tmp = s; 
            s = s->rTree; 
        } 
        BN->data = s->data;
        if (tmp != BN) 
        {
            tmp->rTree = s->lTree;
        }
        else 
        { 
            tmp->lTree = s->lTree;
        }
        delete s;
    }
    return true;
}
//創建二叉排序樹
void CreateBST(BSTree &BT,int n)  
{  
    BT=NULL;//這里一定要將BT置空,表示剛開始的時候是空樹,不置空的話,編譯器分配的BT是非空的  
    int i,j;  
    int r[100];  
    BSTNode *s;  
    for(j=0;j<n;j++)  
        cin>>r[j];  
    for(i=0;i<n;i++)  
    {  
        s=new BSTNode;  
        s->data=r[i];  
        s->lTree=NULL;  
        s->rTree=NULL;  
        InsertBST(BT,s);  
    }  
}

//遞歸實現搜索查找
BSTNode* searchBST(BSTree &BT,int value)
{
    if(BT==NULL)
        return  NULL;
    if(BT->data==value)
        return BT;
    if(BT->data>value)
        return searchBST(BT->lTree,value);
    if(BT->data<value)
        return searchBST(BT->rTree,value);
}

int main()
{
    BSTree bt;
    BSTNode * bn;
    CreateBST(bt,20);
    searchBST(bt,16);
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM