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)这些类(数据结构)用来存储和操作对象组.虽然这些 ...
随机推荐
- 在项目中使用CLR规划
1.创建自己的项目 2.对"解..."→参加→目→C#→数据库→SQL Server项目,例如以下图所看到的: 3.选择操作数据库 4.创建存储过程 5.代码(详见:CLR存储过程 ...
- Arcgis api for javascript学习笔记(4.6版本) - 二维MapView中的FeatureLayer显示标注
4.6版本api的FeatureLayer中有提供 labelsVisible 和 labelingInfo 两个属性,设置这两个属性可以实现显示将属性中某个字段作为标注.但是这两个属性只针对三维Sc ...
- 编码(encode)问题
1. UTF-8 与 GBK UTF-8: 允许含 BOM,但通常不含 BOM 用以解决国际上字符的一种多字节编码, 英文:8 bits(1 byte) 中文:24 bits(3 bytes) UTF ...
- Leetcode 136 Single Number 亦或
题意就是从一堆数中找出唯一的一个只存在一个的数.除了那个数,其他的数都是两个相同的数. 通过亦或的性质: 1)a^a = 0 0^a = a 2)交换律 a^b = b^ a 3)结合律 (a^b)^ ...
- python中的验证码识别库PyTesser
PyTesser PyTesser is an Optical Character Recognition module for Python. It takes as input an image ...
- HDOJ 2189 悼念512四川汶川大地震遇难者——来生一起走 【生成函数】
意甲冠军:没有解释的很清楚. 策略:如果, 这是改变一个简单的生成函数. 这道题做了好久,才明确是那有毛病.还是理解的不够深刻. AC代码: #include<stdio.h> #incl ...
- WPF中的 Layout To Layout
原文:WPF中的 Layout To Layout WPF中的 Layout To Layout 周银辉 WPF的布局功能异常强大,当有时我 ...
- Android Camera2 拍照(四)——对焦模式
原文:Android Camera2 拍照(四)--对焦模式 本篇将重点介绍使用Camera2 API进行手动对焦的设置,以及在手动对焦与自动对焦模式之间切换. 一.手动对焦响应事件 首先我们要实现点 ...
- WPF的点击穿透
1.background 为{x:null} 或 鼠标点击会穿透,如果不想让一个透明的border点击穿透,设置透明色Transparent时就可以点到这个看起来透明的border 2.当依赖属性I ...
- 专门用于消息回调窗口的窗口标识HWND_MESSAGE(创建一个非可视、没有z-order的窗口)
HWND_MESSAGE Message-Only Windows A message-only window enables you to send and receive messages. It ...