二叉排序树查找算法代码

小狼程序员

路虽远行则必达,事虽难做则必成!!

二叉排序树查找算法代码

什么是二叉排序树:首先是一棵二叉树,或者为空,或者满足以下条件:

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;
}

 

 

分类: 算法

posted @ 2019-08-20 22:53  grj001  阅读(180)  评论(0编辑  收藏  举报