在一棵空的二叉排序树中依次插入关键字序列为12,7,17,11,16,2,13,9,21,4,试编写程序创建这棵二叉排序树(要求:创建完成之后对其进行中序遍历检验其是否是递增序列以证明其正确)。
这次的博客写的就是这道题,这道题没有什么难点,关键就是对于二叉排序树的理解,这次的代码中没有写二叉排序树的删除,当然会在后面接着发出来,因为对二叉排序树来说,删除才是真的难点。对与二叉排序树,对字面意思来说,我们就能理解,就是在二叉树的基础上来排序,就是让我们创建一个有顺序的二叉树,如果我们的二叉树学的行的话,这是没有什么难点的。当然,什么都不能按照别人的方法来,每个人都要有自己的方法,针对这道题写的结构体!代码如下!
main.cpp:
#include <iostream>
using namespace std;
#include "han.h"
int main()
{
BSTree T;
createTree(T);
cout<<"以中序遍历输出"<<endl;
coutTree(T);
return 0;
}
han.cpp:
#include <iostream>
using namespace std;
typedef struct BSTNode
{
int data;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
int InsertBST(BSTree &T,int e)
{
if(T == NULL)
{
T = new BSTNode;
T->data = e;
T->lchild = T->rchild = NULL;
return 1;
}
else if(e < T->data)
{
return InsertBST(T->lchild,e);
}
else if(e > T->data)
{
return InsertBST(T->rchild,e);
}
}
void createTree(BSTree &T)
{
T = NULL;
int e;
cout<<"输入要创建的数据项"<<endl;
cin>>e;
while(e != 0)
{
int a = InsertBST(T,e);
cin>>e;
}
}
void coutTree(BSTree T)
{
if(T == NULL)
{
return ;
}
else
{
coutTree(T->lchild);
cout<<T->data<<" ";
coutTree(T->rchild);
}
}
代码的实验结果:
输入要创建的数据项
12 7 17 11 16 2 13 9 21 4
0
以中序遍历输出
2 4 7 9 11 12 13 16 17 21
这道题是用输入0来终止循环的,当然这样也是有弊端的,大家可以按照自己的方法来实现自己的想法,总体来说这个实验就是用递归的方法来实现创建以及输出的,对于数据结构来说,递归是比较重要的!希望大家好好的理解其中的过程,不懂得请留言我,希望给大家带来帮助!