二叉排序树实现

Posted yshun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉排序树实现相关的知识,希望对你有一定的参考价值。

由4,9,0,1,8,6,3,5,2,7创建一个二叉排序树

 

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
#define ElemType int
typedef struct BSTNode
    ElemType data;
    struct BSTNode *lchild,*rchild;
BSTNode,*BSTree;
void BSTInsert(BSTree &T,ElemType key)
    if(T==NULL)
        T=(BSTree)malloc(sizeof(BSTNode));
        T->data=key;
        T->lchild=NULL;
        T->rchild=NULL;
    
    if(key==T->data)
    //判断树中是否存在相同关键字的节点
    if(key<T->data)
        BSTInsert(T->lchild,key);
    
    if(key>T->data)
        BSTInsert(T->rchild,key);
    
//二叉排序树的插入
void CreatBST(BSTree &T,ElemType str[MAXSIZE],int n)
    T=NULL;
    for(int i=0;i<n;i++)
        BSTInsert(T,str[i]);
    
//创建二叉排序树
BSTree BSTSearch(BSTree &T,ElemType key)
    BSTree bst;
    bst=T;
    while(bst!=NULL&&bst->data!=key)
        if(key<bst->data)bst=bst->lchild;
        else bst=bst->rchild;
    
    return bst;
//二叉排序树非递归查找
BSTree BSTSearch1(BSTree &T,ElemType key)
    if(T->data==key)
        return T;
    
    if(T->data>key)
        return BSTSearch1(T->lchild,key);
    
    if(T->data<key)
        return BSTSearch1(T->rchild,key);
    
//二叉排序树递归查找
void visit(BSTree &T)
    if(T!=NULL)
        printf("%d ",T->data);
    

void InOrder(BSTree &T)
    if(T)
        InOrder(T->lchild);
        visit(T);
        InOrder(T->rchild);
    

int main()
    BSTree T;
    BSTree bt;
    ElemType str[MAXSIZE]=4,9,0,1,8,6,3,5,2,7;
    CreatBST(T,str,10);
    printf("中序遍历二叉排序树:");
    InOrder(T);
    printf("\n");
    bt=BSTSearch1(T,8);
    printf("查询到的节点:%d",bt->data);

 

以上是关于二叉排序树实现的主要内容,如果未能解决你的问题,请参考以下文章

二叉排序树各类算法实现

二叉排序树各类算法实现

算法实现在二叉排序树上查找关键值key

数据结构课程设计,二叉排序树。

数据结构与算法学习——二叉排序树

二叉排序树