C语言实现常用数据结构——二叉树
#include<stdio.h>
#include<stdlib.h>
#define SIZE 10
typedef struct Tree {
int data;
struct Tree *left;
struct Tree *right;
} tree; int find(tree *t,int x) {
int i=;
if(t==NULL) {
return -;
}
if(t->data==x) {
return i;
} else if(x<t->data) {
i++;
find(t->left,x);
} else if(x>t->data) {
i++;
find(t->right,x);
}
} tree *findMin(tree *t) {
if(t==NULL) {
return NULL;
} else if(t->left==NULL) {
return t;
} else {
return findMin(t->left);
}
} int findMax(tree *t) {
if(t!=NULL) {
while(t->right!=NULL) {
t=t->right;
}
}
return t->data;
} tree *init(tree *t,int x) {
if(t==NULL) {
t=malloc(sizeof(tree));
t->data=x;
t->left=NULL;
t->right=NULL;
return t;
} else if(t->left ==NULL) {
t->left=init(t->left,x);
return t;
} else {
t->right=init(t->right,x); return t;
}
} tree *insertSort(tree *t,int x) {
if(t==NULL) {
t=malloc(sizeof(tree));
t->data=x;
t->left=NULL;
t->right=NULL;
} else if(x < t->data) {
t->left=insertSort(t->left,x);
} else if(x > t->data) {
t->right=insertSort(t->right,x);
}
return t;
} tree *delete(tree *t,int x) {
tree *temp;
if(t==NULL) {
printf("error,element not found!");
} else if( x < t->data ) {/*go left*/
t->left=delete(t->left,x);
} else if( x > t->data ) {/*go right*/
t->right=delete( t->right,x );
} else if( t->left && t->right) { /*t->data==x and t has two children*/
temp=findMin( t->right );
t->data=temp->data;
t->right=delete( t->right,t->data );
} else {/*one or zero children */
temp=t;
if( t->left==NULL) {
t=t->right;
} else if( t->right == NULL ) {
t=t->left;
}
free(temp);
}
return t;
} void preTravel(tree *t) {
if(t==NULL) {
return;
}
printf("%d ",t->data);
preTravel(t->left);
preTravel(t->right);
} void midTravel(tree *t) {
if(t==NULL) {
return;
}
midTravel(t->left);
printf("%d ",t->data);
midTravel(t->right);
} void postTravel(tree *t) {
if(t==NULL) {
return;
}
postTravel(t->left);
postTravel(t->right);
printf("%d ",t->data);
} main() {
tree *t;
int i;
for(i=; i<SIZE; i++) {
t=init(t,i);
}
preTravel(t);
printf("\n");
midTravel(t);
printf("\n");
postTravel(t);
}
C语言实现常用数据结构——二叉树的更多相关文章
- C语言实现常用数据结构——链表
#include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node *next; ...
- C语言实现常用数据结构——堆
#include<stdio.h> #include<stdlib.h> #define CAPACITY 20 /*堆有两个性质: * 1.结构性:堆必须是一颗完全二叉树 * ...
- C语言实现常用数据结构——图
#include<stdio.h> #include<stdlib.h> #define SIZE 20 #define LENGTH(a) (sizeof(a)/sizeof ...
- C语言实现常用数据结构——队列
#include<stdio.h> #include<stdlib.h> #define MAX_SIZE 10 /* 用一个动态数组来实现队列 */ typedef stru ...
- C语言实现常用数据结构——栈
#include<stdio.h> #include<stdlib.h> //用链表实现栈 typedef struct Node { int data; struct Nod ...
- C++常用数据结构的实现
常用数据结构与算法的实现.整理与总结 我将我所有数据结构的实现放在了github中:Data-Structures-Implemented-By-Me 常用数据结构与算法的实现.整理与总结 KMP字符 ...
- 1. C语言中的数据结构.md
C语言内建数据结构类型 整型 整型数据是最基本的数据类型,不过从整形出发衍生出好几种integer-like数据结构,譬如字符型,短整型,整型,长整型.他们都是最基本的方式来组织的数据结构,一般是几位 ...
- php常用数据结构
# 常用数据结构--------------------------------------------------------------------------------## 树(Tree)- ...
- Java 集合框架(常用数据结构)
早在Java 2中之前,Java就提供了特设类.比如:向量(Vector).栈(Stack).字典(Dictionary).哈希表(Hashtable)这些类(数据结构)用来存储和操作对象组.虽然这些 ...
随机推荐
- Java:JSON解析工具-org.json
一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...
- .NET CORE的TagHelper智能提示
VisualStudio2017下ASP.NET CORE的TagHelper智能提示不能使用的解决办法 之前在VS2017RC中就发现该问题,安装了依赖,但是前段一直点不出来asp-for,后来 ...
- Delphi 禁用x64位系统文件重定向功能
在X64系统里面,一些特殊的目录和特殊的注册表键被分为2个独立的部分.对于文件系统来说, %systemroot%\system32 目录被保留给64位文件使用,而32位文件会被重定向到%s ...
- IT 达人
1. 手机与电脑多屏互动 [教程]华为多屏互动功能与PC win7的连接 要求手机和电脑必须在同一局域网内,且手机必须支持多屏互动功能. 操作步骤如下: PC 端: services.msc,启动下面 ...
- WPF中制作立体效果的文字或LOGO图形(续)
原文:WPF中制作立体效果的文字或LOGO图形(续) 上篇"WPF中制作立体效果的文字或LOGO图形"(http://blog.csdn.net/johnsuna/archive/ ...
- 从JDBC到commons-dbutils
1.前言 玩过Java web的人应该都接触过JDBC,正是有了它,Java程序才能轻松地访问数据库.JDBC很多人都会,但是为什么我还要写它呢?我曾经一度用烂了JDBC,一度认为JDBC不过如此,后 ...
- Akka边学边写(1)-- Hello, World!
Akka Akka是什么呢?直接引用Akka站点上面的描写叙述吧: Akka is a toolkit and runtime for building highly concurrent, dist ...
- Archlinux 下Intel + NVIDIA 双显卡3D 游戏配置(dota2@steam)
下午打了几场dota2 感觉流畅度还算非常不错的,写点东西记录一下.用Archlinux 的一般来说都会用搜索引擎,所以仅仅说下须要注意的地方就可以. 1. steam 自带的OpenGL 库是过时的 ...
- 微信小程序特殊效果合集
微信小程序的开发并不难,但是有时我们想做出比较炫的效果,可能会一时没有思路或找不到方法.下面就整理了微信小程序的一些特殊效果的案例,均来自网络,供你参考. 1.文字跑马灯效果:http://www.w ...
- 亲串 (hdu 2203 KMP)
亲串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...