码迷,mamicode.com
首页 > 编程语言 > 详细

(编程训练)再回首,数据结构——二叉排序树的建立

时间:2015-05-13 10:39:46      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:数据结构   二叉排序树   

       最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。


       希望这些能提供给初学者一些参考。


       在VC++6.0下可运行,当初还写了不少注释。



【问题描述】

以输入的一组整数作为关键字的值,构造其对应的二叉排序树,并对给点的值在该二叉排序树上进行查找


【基本要求】

·输入:输入一组关键字(整数)及要查找的值

·输出:排好序的关键字及查找的结果


样例输入

60 35 69 84 96 13 66 34 21 -1

40

样例输出

13 21 34 35 60 66 69 84 96

40…… 没找到

 

【模块划分】

1.    BSTInOrder()函数:中序遍历二叉排序树

2.    BTSInsert()函数:在二叉排序树上插入一个结点

3.    CreateBST()函数:生成二叉排序树

4.    BSTSearch(): 在二叉排序树上查找,找到,返回指向该节点的指针,否则返回空指针

5.    main函数:调用各函数



#include <stdio.h>
#include <malloc.h>


typedef struct BSTNode
{
<span style="white-space:pre">	</span>int key;
<span style="white-space:pre">	</span>struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;


BSTree f;


//中序遍历二叉排序树
void BSTInOrder(BSTree t)
{
<span style="white-space:pre">	</span>if(t)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>BSTInOrder(t->lchild);
<span style="white-space:pre">		</span>printf("%-4d ",t->key);
<span style="white-space:pre">		</span>BSTInOrder(t->rchild);
<span style="white-space:pre">	</span>}
}


//在二叉树中查找值为k的结点
int BSTSearch(BSTree t, int k)
{
<span style="white-space:pre">	</span>BSTree p;
<span style="white-space:pre">	</span>p=t;
<span style="white-space:pre">	</span>f=NULL;
<span style="white-space:pre">	</span>while(p)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>if(k==p->key)
<span style="white-space:pre">			</span>return 1;
<span style="white-space:pre">		</span>else if(k<p->key)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>f=p;
<span style="white-space:pre">			</span>p=p->lchild;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>else
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>f=p;
<span style="white-space:pre">			</span>p=p->rchild;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>return 0;
}


//在二叉树t中查找关键字值为k的结点,若找不到k,则插入k
void BSTInsert(BSTree& t, int k)
{
<span style="white-space:pre">	</span>BSTree s;
<span style="white-space:pre">	</span>int p;
<span style="white-space:pre">	</span>p=BSTSearch(t,k);
<span style="white-space:pre">	</span>if(!p)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>s=(BSTNode*)malloc(sizeof(BSTNode));
<span style="white-space:pre">		</span>s->key=k;
<span style="white-space:pre">		</span>s->lchild=s->rchild=NULL;
<span style="white-space:pre">		</span>if(!t)
<span style="white-space:pre">			</span>t=s;
<span style="white-space:pre">		</span>else if(k<f->key)
<span style="white-space:pre">			</span>f->lchild=s;
<span style="white-space:pre">		</span>else
<span style="white-space:pre">			</span>f->rchild=s;
<span style="white-space:pre">	</span>}
}


//创建二叉排序树
BSTree CreateBST()
{
<span style="white-space:pre">	</span>BSTree t;
<span style="white-space:pre">	</span>int key;
<span style="white-space:pre">	</span>//<span style="white-space:pre">	</span>BSTree BSTInsert(BSTree t, int k);
<span style="white-space:pre">	</span>t=NULL;
<span style="white-space:pre">	</span>printf("输入数据\n");
<span style="white-space:pre">	</span>scanf("%d",&key);
<span style="white-space:pre">	</span>while(key!=-1)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>BSTInsert(t, key);
//<span style="white-space:pre">		</span>printf("输入数据\n");
<span style="white-space:pre">		</span>scanf("%d",&key);
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>return t;
}


int main()
{
<span style="white-space:pre">	</span>BSTree root;
<span style="white-space:pre">	</span>int p,key;
<span style="white-space:pre">	</span>root=CreateBST();
<span style="white-space:pre">	</span>printf("二叉排序树列表\n");
<span style="white-space:pre">	</span>BSTInOrder(root);
<span style="white-space:pre">	</span>printf("\n输入要查找的值\n");
<span style="white-space:pre">	</span>scanf("%d",&key);
<span style="white-space:pre">	</span>p=BSTSearch(root,key);
<span style="white-space:pre">	</span>if(p)
<span style="white-space:pre">		</span>printf("%d...... 能够找到\n",key);
<span style="white-space:pre">	</span>else
<span style="white-space:pre">		</span>printf("%d...... 没找到\n",key);
<span style="white-space:pre">	</span>return 0;
}



技术分享


(编程训练)再回首,数据结构——二叉排序树的建立

标签:数据结构   二叉排序树   

原文地址:http://blog.csdn.net/u011694809/article/details/45675341

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!