//二叉排序树
//BSTNode
#include<stdio.h>
#include<iostream>
using namespace std;
#include<bits/stdc++.h>
//#include<stdlib.h>//malloc
//二叉排序树的二叉链表存储
typedef struct
{
int key;//关键字项
int otherinfo;//其他数据项
}Elemtype;//每个节点的数据域的类型名
typedef struct BSTNode
{
Elemtype data;//每个节点的数据域包括关键字项和其他数据项
struct BSTNode *lchild,*rchild;//左右孩子指针
}BSTNode,*BSTree;
//二叉排序树的插入
void InsertBST(BSTree &T,Elemtype e)
{//当二叉排序树中不存在关键字等于e.key的数据元素时,则插入该元素
if(T==NULL)//当树为空时
{
//T = (BSTree)malloc(sizeof(BSTNode));
//T=new BSTNode;
BSTree S;
S = new BSTNode;
S->data = e;
S->lchild=S->rchild=NULL;
T=S;
}
else
{
if(e.key<T->data.key) InsertBST(T->lchild,e);
else
{
if(e.key>T->data.key) InsertBST(T->rchild,e);
}
}
}
//二叉排序树的创建
void CreateBST(BSTree &T)
{
T=NULL;
Elemtype e;
cin>>e.otherinfo;
e.key=e.otherinfo;
while(e.otherinfo!=(-1))//原本是e.key
{
InsertBST(T,e);
cin>>e.otherinfo;
e.key=e.otherinfo;
}
}
//中序遍历树,即将树从小到大排序
void medorder(BSTree &T)
{
if(T==NULL) return;
else
{
medorder(T->lchild);
printf("%d ",T->data.otherinfo);
medorder(T->rchild);
}
}
int main()
{
BSTree T;
CreateBST(T);
medorder(T);
return 0;
}
二叉排序树
最新推荐文章于 2025-04-09 15:48:38 发布