二叉搜索树之字符串的创建和遍历

本文介绍了如何使用C++创建和遍历二叉搜索树,特别是针对字符串的操作。首先定义了二叉搜索树的结构体,接着通过`creategen`函数创建根节点,`create`函数用于在树中插入新的字符串节点。此外,还提供了三种遍历方法:先序遍历、中序遍历和后序遍历,分别用以展示树的节点顺序。在`main`函数中,用户可以输入字符串创建二叉搜索树,并查看不同遍历顺序的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <cstring>
using namespace std;
//树的结构体
typedef struct node{
char data[20];
struct node *left, *right;
}*ptree, pnode;




//搜索二叉树的根节点
ptree creategen(char c[])
{
ptree t;
t = (ptree)malloc(sizeof(pnode));
strcpy(t->data,c);
t->left = NULL;
t->right = NULL;
return t;
}




//创建搜索二叉树
void create(ptree root, char c[])
{
ptree temp, t;
t = root;
if (strcmp(t->data,c)==0)
{
printf("你所输入的元素已经存在:\n");
exit(1);
}
if (strcmp(t->data,c)<0)
{
if (t->left == NULL)
{
temp = (ptree)malloc(sizeof(pnode));
strcpy(temp->data, c);;
temp->left = NULL;
temp->right = NULL;
t->left = temp;
}
else
{
create(t->left, c);
}
}
if (strcmp(t->data,c)>0)
{
if (t->right == NULL)
{
temp = (ptree)malloc(sizeof(pnode));
strcpy(temp->data,c);
temp->left = NULL;
temp->right = NULL;
t->right = temp;
}
else
{
create(t->right, c);
}
}
return;
}




//递归先序遍历二叉树
void preorder(ptree t)
{
if (t)
{
printf("%s\n", t->data);
preorder(t->left);
preorder(t->right);
}
}




//递归中序遍历二叉搜索树
void mindorder(ptree t)
{
if (t)
{
mindorder(t->left);
printf("%s\n", t->data);
mindorder(t->right);
}
}




//递归后序遍历二叉搜索树
void aftorder(ptree t)
{
if (t)
{
aftorder(t->left);
aftorder(t->right);
printf("%s\n", t->data);
}
}




int main()
{
ptree bt;
int n;
char ch[20];
printf("创建二叉搜索树的根节点:\n");
scanf("%s", ch);
getchar();
bt = creategen(ch);
printf("输入二叉树的子节点数:\n");
scanf("%d", &n);
getchar();
while (n--)
{
memset(ch,NULL,sizeof(ch));
scanf("%s", ch);
getchar();
create(bt, ch);
}
printf("先序遍历二叉搜索树是:\n");
preorder(bt);
printf("\n");
printf("中序遍历二叉搜索树是:\n");
mindorder(bt);
printf("\n");
printf("后序遍历二叉搜索树是\n");
aftorder(bt);
printf("\n");
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值