二叉排序树

二叉排序树又叫二叉查找树。

遵循三个原则:

1、一棵树要么为空,要么

2、左孩子节点小于根节点值,根节点值小于右孩子节点值

3、子树也具备这个规则

代码:

#include <iostream>
#include <cstdlib>
 
using namespace std;
static int flag=0;
typedef struct binst
{
    int data;
    struct binst *lchild;
    struct binst *rchild;
}*BST;
 
void createBST(BST &bst,int key)
{
    BST t,p,pre;
    t=(BST)malloc(sizeof(struct binst));
    if(!t)
    {
       cout<<"allocate fail";
       return;
    }
    t->data=key;
    t->lchild=NULL;
    t->rchild=NULL;
    if(bst==NULL)
    {
        bst=t;
    }
    else
    {
    p=bst;
    while(p)
    {
        if(p->data==key)
        {
            free(t);
            return;
        }
        else if(p->data<key)
        {
            pre=p;
            p=p->rchild;
        }
        else
        {
            pre=p;
            p=p->lchild;
        }
    }
    if(pre->data<key)
    {
        pre->rchild=t;
    }
    else
    {
        pre->lchild=t;
    }
    }
}
 
void bstSearch(BST bst,int key)
{
     
    if(bst)
    {
        if(bst->data==key)
        {
            flag=1;
            cout<<"search success!"<<endl;
            return;
        }
        else if(bst->data<key)
        {
            bstSearch(bst->rchild,key);
        }
        else
        {
            bstSearch(bst->lchild,key);
        }
    }
    if(flag==0)
    {
        cout<<"search fail!"<<endl;
    }
}
void preOrderSearch(BST bst)
{
    if(bst)
    {
        cout<<bst->data<<"  ";
        preOrderSearch(bst->lchild);
        preOrderSearch(bst->rchild);
    }
}
 
int main()
{
    BST bst=NULL;
    int arr[]={12,3,5,17,15,19,20};
    int key;
    cout<<"create the BST"<<endl;
    for(int i=0;i<7;i++)
    {
        createBST(bst,arr[i]);
    }
    cout<<"output the bst:"<<endl;
    preOrderSearch(bst);
    cout<<endl;
    cout<<"please input the key:";
    cin>>key;
    bstSearch(bst,key);
    cout<<endl;
    return 0;
 
}

 运行截图:

posted @   xshang  阅读(204)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示