用二叉搜索树根据 字典(字符串) 建树 和 后续输出
作者:互联网
终于建好树了,太开心了^^^^^^^^^^^^^^^^^^
思路:
一.定义树结点结构
typedef struct TreeNode
{
char ch[20];
struct TreeNode *left;
struct TreeNode *right;
}Tree;
二.写主函数 核心思想
-
循环输入字符数组并且建树
-
后续输出
-
在此之前要做一些准备工作,首先要定义一个字符类型数组并且初始化 char sh[20]={’\0’}; 第二步 定义一个根节点指向NULL ,一定要指向NULL 如果不指向,在建树的时候很容易出错 Tree *root=NULL;
到这 准备工作就差不多啦,那么接下里就要写主函数中用到的建树函数和后续输出函数了int main (void)
{
char sh[20]={’\0’};
Tree *root=NULL;
while(scanf("%s",sh)!=EOF)//开始输入字典
{
if(sh[0]==’#’)//如果违背规则 跳出
break;
root = Insert(sh,root);//建立树
}//建立字典完毕
PostOderTraversal(root);
return 0;
}
三.建树
if(root==NULL)
{
root = malloc(sizeof(Tree));
strcpy(root->ch,sh);
root->left = NULL;
root->right = NULL;
这里 我用到了#include <string.h> strcpy()字符串复制函数。以为不是查找,所以左右孩子一定要指明。
如果不为空 另当别论
else
{
int cmp;
cmp = strcmp(sh,root->ch);
if(cmp > 0)
root->right = Insert(sh,root->right);
if(cmp < 0)
root->left = Insert(sh,root->left);
}
一般的输入数字建立二叉搜索树,比较数值就可以了。那字符串要怎么比较呢?长度?字母?其实是有解决办法的,在#include <string.h> 这个头文件里,有一个函数叫strcmp(),如果串1>串2 返回正数‘;,如果串1<串2 返回负数;相等返回0 。所以这里借用一下这个函数来解决比较大小的问题。
四. 后续输出
void PostOderTraversal(Tree* root)
{
if(root)
{
PostOderTraversal(root->left);
PostOderTraversal(root->right);
printf("%s,",root->ch);
}
}
递归,printf放后面就解决了
代码如下《有写漏的地方,欢迎大家指出来》
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct TreeNode
{
char ch[20];
struct TreeNode *left;
struct TreeNode *right;
}Tree;
Tree* Insert(char *sh,Tree *root)
{
if(root==NULL)
{
root = malloc(sizeof(Tree));
strcpy(root->ch,sh);
root->left = NULL;
root->right = NULL;
}
else
{
int cmp;
cmp = strcmp(sh,root->ch);
if(cmp > 0)
root->right = Insert(sh,root->right);
if(cmp < 0)
root->left = Insert(sh,root->left);
}
return root;
}
void PostOderTraversal(Tree* root)
{
if(root)
{
PostOderTraversal(root->left);
PostOderTraversal(root->right);
printf("%s,",root->ch);
}
}
int main (void)
{
char sh[20]={'\0'};
Tree *root=NULL;
while(scanf("%s",sh)!=EOF)//开始输入字典
{
if(sh[0]=='#')//如果违背规则 跳出
break;
root = Insert(sh,root);//建立树
}//建立字典完毕
PostOderTraversal(root);
return 0;
}
标签:right,Tree,二叉,sh,left,NULL,root,建树,字典 来源: https://blog.csdn.net/weixin_43573750/article/details/93409070