二叉排序树的创建,查找和插入

二叉排序树的查找,插入和创建代码

#include <iostream>
#include<stdlib.h> 

typedef struct BTNode{
    int data;
    BTNode *lchild;
    BTNode *rchild;
}BTNode;

int SearchBTS(BTNode *T,int key,BTNode *f,BTNode *&p){//二叉排序树的查找 
    BTNode *r,*s;
    if(!T){
        p=f;//p指向他爹
        return 0; 
    }else{
        if(key==T->data){
            p=T;
            return 1;
        }else if(key<T->data){
            return SearchBTS(T->lchild,key,T,p);
        }else{
            return SearchBTS(T->rchild,key,T,p);
        }
    }
}

int InsertBST(BTNode *&T,int key){//二叉树的插入 
    BTNode *p,*s;

    if(!SearchBTS(T,key,NULL,p)){
        s=(BTNode *)malloc(sizeof(BTNode));
        s->data=key;
        s->lchild=s->rchild=NULL;
        if(!p){
            T=s;
        }else if(key<p->data){
            p->lchild=s;
        }else{
            p->rchild=s;
        }
        return 1;
    }
    return 0;
}

void createBTS(BTNode *&T,int arr[],int n){
    for(int i=0;i<n;i++){
        InsertBST(T,arr[i]);
    }
}
void LDR(BTNode *T){
    if(T!=NULL){
        LDR(T->lchild);
        printf("%d ",T->data);
        LDR(T->rchild);
    }
}
int main(int argc, char** argv) {
    BTNode *T;
    int arr[]={5,9,35,8,7,21,6,4};
    for(int i=0;i<8;i++){
        InsertBST(T,arr[i]);
    }
    //createBTS(T,arr,8); 
    LDR(T);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37597859/article/details/79967010