#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语言实现常用数据结构——二叉树的更多相关文章

  1. C语言实现常用数据结构——链表

    #include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node *next; ...

  2. C语言实现常用数据结构——堆

    #include<stdio.h> #include<stdlib.h> #define CAPACITY 20 /*堆有两个性质: * 1.结构性:堆必须是一颗完全二叉树 * ...

  3. C语言实现常用数据结构——图

    #include<stdio.h> #include<stdlib.h> #define SIZE 20 #define LENGTH(a) (sizeof(a)/sizeof ...

  4. C语言实现常用数据结构——队列

    #include<stdio.h> #include<stdlib.h> #define MAX_SIZE 10 /* 用一个动态数组来实现队列 */ typedef stru ...

  5. C语言实现常用数据结构——栈

    #include<stdio.h> #include<stdlib.h> //用链表实现栈 typedef struct Node { int data; struct Nod ...

  6. C++常用数据结构的实现

    常用数据结构与算法的实现.整理与总结 我将我所有数据结构的实现放在了github中:Data-Structures-Implemented-By-Me 常用数据结构与算法的实现.整理与总结 KMP字符 ...

  7. 1. C语言中的数据结构.md

    C语言内建数据结构类型 整型 整型数据是最基本的数据类型,不过从整形出发衍生出好几种integer-like数据结构,譬如字符型,短整型,整型,长整型.他们都是最基本的方式来组织的数据结构,一般是几位 ...

  8. php常用数据结构

    # 常用数据结构--------------------------------------------------------------------------------## 树(Tree)- ...

  9. Java 集合框架(常用数据结构)

    早在Java 2中之前,Java就提供了特设类.比如:向量(Vector).栈(Stack).字典(Dictionary).哈希表(Hashtable)这些类(数据结构)用来存储和操作对象组.虽然这些 ...

随机推荐

  1. Android 平台下Cordova 调用Activity插件开发

    首先建立一个包名为package com.JiajiaCy.CallActivity; package com.JajaCy.CallActivity; import org.apache.cordo ...

  2. vue 遇到的问题

    1.v-show与v-if 在对数据进行显示的时候尽量选择用v-if,v-if对应的则是由生命周期,而对于v-show没有生命周期的切换,大多数使用在ui层的切换,display:none 2.com ...

  3. ubuntu grub 操作

    系统开机时,按住 shift 进入 grub 1. 什么是 Grub GNU GRUB(GRand Unified Bootloader 简称"GRUB")是一个来自GNU项目的多 ...

  4. Linux调试工具

    1. 使用printf调试 #ifdef DEBUG Printf(“valriable x has value = %d\n”, x) #endif 然后在编译选项中加入-DDEBUG 更复杂的调试 ...

  5. 关于js的window.open()

    window.open是javascript函数,该函数的作用是打开一个新窗口或这改变原来的窗口,不过一般用来的是打开新窗口,因为修改原来的网页地址,可以有另一个函数,那就是window.locati ...

  6. WPF旋转的界面实现

    原文:WPF旋转的界面实现 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/1821534 ...

  7. web开发中../、./、/的区别

    原文:web开发中../.././的区别 最近在业余时间慢慢玩起了网站开发,觉得挺有意思的.在开发过程中,老是分不清 ../.././三者之间的区别,也老是弄混,最后仔细搜索研究了一下,现在终于懂了. ...

  8. Logback 专题

    logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <configuratio ...

  9. JAVASCRIPT高程笔记-------第五章 引用类型

    一.Object类型 1.1创建方式 ①new关键字 : var person = new Oject(); ②给定直接量: var person = { name : "zhangsan& ...

  10. MVC EF Code First

    1 在Models里面创建类,用[Key]特性指定主键: 2 在Model里面增加导航属性: 3 在web.config里面增加连接字符串 4 创建继承于DbContext的类 5 创建Control ...