二叉树排序树的建立和检索【数据结构实践报告】

来源:互联网 发布:穆斯林 知乎 编辑:程序博客网 时间:2024/05/22 12:38

 数据结构实验报告

实验名称:实验五 二叉树排序树的建立和检索

学号:***

姓名:gnosed

实验日期:2017.11.10

 

一、实验目的

1、掌握二叉排序树的建立

2、对二叉排序树进行数据检索

 

二、实验具体内容

1、实验题目1:

(1)题目

构造一棵二叉排序树,并进行遍历,检索数据

要求:

1、输入数据构造二叉排序树

2、对构造好的二叉排序树进行中根序遍历

3、对构造好的二叉排序树进行数据检索

提示:

对二叉排序树进行中根序遍历的时候,获得的是排序序列

 

(2)分析

构造(以小根堆为例):

1)查找:

按二叉排序树的性质,查找并返回元素要插入的位置——父亲(叶)节点地址;

2)插入:对于给定序列的每个元素(无重复),

如果二叉排序树为空,创建根节点;

否则,执行1),将元素与返回的叶节点进行比较,若前者小则将其插入到后者的左子树,否则插入到右子树。

重复2),直到序列末尾。

验证:

对构造好的二叉排序树进行中序遍历,验证构造是否正确。

(3)实验代码

源代码:

#include<iostream>#include<string.h>#defineELEMTYPE int usingnamespace std; typedefstruct node* Pnode;typedefstruct node* Ptree;structnode{    ELEMTYPE x;    Pnode llink,rlink;};intMAXN;//1)PnodesearchPnode(Ptree t,ELEMTYPE i){   if(t->llink==NULL&&t->rlink==NULL)        return t;    Pnode pre;//flag previous node    while(t){            pre=t;        if(i<t->x)            t=t->llink;        else            t=t->rlink;    }    return pre;}//2)Ptreecreate(ELEMTYPE seq[]){    Pnode root=new struct node;    root->x=seq[0];    root->llink=root->rlink=NULL;    for(int i=1;i<MAXN;i++){        Pnode t=new struct node;        t->x=seq[i];        t->llink=t->rlink=NULL;         Pnode pre=searchPnode(root,seq[i]);        if(seq[i]<pre->x)//linking            pre->llink=t;        else            pre->rlink=t;    }    return root;}//recursionin order traversingvoidin_order(Ptree root){    if(!root)        return;    in_order(root->llink);    cout<<root->x<<"";    in_order(root->rlink);}intmain(){    cin>>MAXN;//input number of nodes    ELEMTYPE seq[MAXN];    for(int i=0;i<MAXN;i++)        cin>>seq[i];    cout<<"In order search of thetree: ";    in_order(create(seq));    return 0;}


测试结果:

1053 7 10 1 4 8 -40 -5 0Inorder search of the tree: -40 -5 0 1 3 4 5 7 8 10 1455-88 45 32 1 56 44 30 23 -23 2 3 100 -101Inorder search of the tree: -101 -88 -23 1 2 3 23 30 32 44 45 55 56 100


三、实验小结

1.        二叉排序树的插入时间复杂度为O(n^2)

2.        检索二叉排序树最坏时间复杂度为O(n)

阅读全文
0 0