二叉树是一种很常见的数据结构,特别是二叉搜索树,如果在插入的时候组建二叉树的话,在搜索的时候可以达到很高的速度。下面我把自己实现的一个二叉搜索树的源码贴出来,大家可以参考一下。
先看数据结构的定义:
bintree.h
#include <stdio.h>
struct tnode{
char *word;
int count;
struct tnode *left;
struct tnode *right;
};
struct tnode *addtree(struct tnode *,char *);
void treeprint(struct tnode *);
头文件中定义了数据结构和两个函数,相当于接口的定义,下面是具体的实现:
bintree.c
#include <stdlib.h>
#include <string.h>
#include "bintree.h"
struct tnode *addtree(struct tnode *p,char *w)
{
int cond;
if(p == NULL){
p = (struct tnode *)malloc(sizeof(struct tnode));
p->word = strdup(w);
p->count = 1;
p->left = p->right = NULL;
}else if((cond = strcmp(w,p->word)) == 0)
p->count++;
else if(cond < 0)
p->left = addtree(p->left,w);
else
p->right = addtree(p->right,w);
return p;
}
//下面分别为三种遍历树的方式,中序,前序和后序遍历
void treeprint(struct tnode *p)
{
if(p != NULL){
treeprint(p->left);
fprintf(stdout,"%s : %4d\n",p->word,p->count);
treeprint(p->right);
}
}
void treeprint2(struct tnode *p)
{
if(p != NULL){
fprintf(stdout,"%s : %4d\n",p->word,p->count);
treeprint(p->left);
treeprint(p->right);
}
}
void treeprint3(struct tnode *p)
{
if(p != NULL){
treeprint(p->left);
treeprint(p->right);
fprintf(stdout,"%s : %4d\n",p->word,p->count);
}
}
好了,下边是一个测试函数:
main.c
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include "bintree.h"
static char *items[] = {
"Today","Tomorrow","Tuck","Hello","Mystery","today",
"Tuck","Hello","Monday","Monday",NULL
};
int main(void)
{
int i;
struct tnode *root;
root = NULL;
for(i = 0;items[i] != NULL;i++)
root = addtree(root,items[i]);
treeprint(root);
fprintf(stdout,"---------------------------\n");
treeprint2(root);
fprintf(stdout,"---------------------------\n");
treeprint3(root);
return 0;
}
测试结果如下:
结果:
Hello : 2
Monday : 2
Mystery : 1
Today : 1
Tomorrow : 1
Tuck : 2
today : 1
---------------------------
Today : 1
Hello : 2
Monday : 2
Mystery : 1
Tomorrow : 1
Tuck : 2
today : 1
---------------------------
Hello : 2
Monday : 2
Mystery : 1
Tomorrow : 1
Tuck : 2
today : 1
makefile等我打包到附件中,需要的朋友可以自行下载。
分享到:
相关推荐
二叉树可以为空,或者由一个根节点和两棵(可能为空)子二叉树组成。二叉树常用于实现二分查找、表达式树、文件系统等。 **2. C语言中的二叉树节点结构** 在C语言中,我们通常用结构体来表示二叉树节点。一个基本...
二叉树的C语言实现,实现二叉树基本功能,建树、遍历、左右子树交换等功能。
二叉树的C语言实现版本
- 二叉树是由节点构成的数据结构,每个节点包含一个值、一个指向左子节点的指针和一个指向右子节点的指针。 - 二叉搜索树(BST):左子节点的值小于当前节点,右子节点的值大于当前节点。 2. **AVL树**: - AVL...
实验报告通常会阐述算法的复杂度分析,比如时间复杂度为O(n),因为每个节点都被访问一次。 学习并理解二叉树遍历算法,不仅可以加深对数据结构的理解,也是提升编程能力的关键步骤。通过实践和实验,可以更好地掌握...
本主题将深入探讨如何使用C语言实现一个简单的二叉树,并实现其基本操作,如创建、插入、查找和删除节点。 首先,我们需要定义二叉树节点的数据结构。在C语言中,这可以通过创建一个结构体来完成: ```c typedef ...
这可以通过遍历文本并用一个哈希表存储每个字符及其出现次数来实现。 2. **创建最小堆**:基于字符频率,构建一个优先队列(最小堆),其中根节点是频率最小的两个元素。每次取出频率最小的两个节点,将它们合并为...
根据给定的文件信息,我们可以总结出以下关于“使用C语言实现的数据结构中的二叉树”的相关知识点: ### 一、二叉树的基本定义及结构体设计 在本代码示例中,首先定义了二叉树节点的结构体 `BiTNode` 和二叉树类型...
二叉树是由节点组成的集合,该集合要么为空集(称为空二叉树),要么由一个根节点及两棵分别称为左子树和右子树的不相交的二叉树组成。 #### 二、C语言中的二叉树定义 在C语言中,可以通过结构体来定义二叉树节点...
这个“经典二叉树的实现(C语言实现)”项目,显然是一个用于学习和实践二叉树概念的代码库。在Linux环境下,使用GCC编译器进行编译,这表明源代码可能包含头文件和.c文件,其中包含了二叉树的各种操作函数。 ...
C语言实现二叉树的创建,大师级人物编写的程序,简单易懂
在C语言中,首先需要定义一个结构体来表示二叉搜索树的节点。这个结构体通常包含三个部分:节点的值、左子节点指针和右子节点指针。 ```c typedef struct Node { int key; struct Node* left; struct Node* ...
在C语言中实现这些功能,我们需要定义一个二叉树节点结构体,包含节点值和指向左右子节点的指针。例如: ```c typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; } TreeNode;...
这里定义了一个名为`tree`的类来表示二叉树的节点。每个节点包含一个字符型数据`data`以及指向左右子节点的指针`lchild`和`rchild`。此外,构造函数`tree()`用于初始化左右子节点为空。 ### 三、构建二叉树 构建...
线性链表和二叉树的c语言实现,对学习数据结构的同学来说可以好好参考
在计算机科学中,二叉树是一种常见的数据结构,它由一个根节点以及最多两个子树构成,这两个子树各自又可以是二叉树。二叉树的遍历是其操作中最基本且频繁的操作之一,主要用于按特定顺序访问树中的所有节点。遍历...
在C语言中,首先我们需要定义一个结构体来表示二叉树的节点。这个结构体通常包含一个数据字段用于存储数据,以及两个指向子节点的指针字段。例如: ```c typedef struct TreeNode { int data; struct TreeNode ...
- 链式存储:用链表实现,每个节点包含元素值和指向下一个节点的指针。 2. **栈的特性**: - 栈是后进先出(LIFO)的数据结构,适用于处理需要逆序处理的操作,如括号匹配和后缀表达式计算。 3. **中缀到后缀...
搜索二叉树(Binary Search Tree,简称BST)是一种特殊的二叉树数据结构,它具有以下特性:对于树中的任意一个节点,其左子树中的所有节点的值...通过这些知识点,你可以构建一个功能完整的C语言版搜索二叉树数据结构。