Day19、树的完整版代码
来源:互联网 发布:php array判断 编辑:程序博客网 时间:2024/04/19 18:26
编写源文件:02tree.c
/*
二叉树演示
*/
#include <stdlib.h>
#include "02tree.h"
//初始化函数
void tree_init(tree *p_tree) {
p_tree->p_node = NULL;
}
//清理函数
void tree_deinit(tree *p_tree) {
if (!(p_tree->p_node)) {
return ;
}
tree_deinit(&(p_tree->p_node->left));
tree_deinit(&(p_tree->p_node->right));
free(p_tree->p_node);
p_tree->p_node = NULL;
}
//在有序二叉树里查找某个数字所在的位置
tree *tree_search_in_order(const tree*p_tree, int num) {
if (!(p_tree->p_node)) {
return (tree *)p_tree;
}
if (p_tree->p_node->num == num) {
return (tree *)p_tree;
}
else if (p_tree->p_node->num > num) {
return tree_search_in_order(&(p_tree->p_node->left), num);
}
else {
return tree_search_in_order(&(p_tree->p_node->right), num);
}
}
//在有序二叉树里插入新数字
void tree_insert_in_order(tree *p_tree, intnum) {
tree *p_tr = tree_search_in_order(p_tree, num);
if (p_tr->p_node) {
return ;
}
node *p_tmp = (node *)malloc(sizeof(node));
if (!p_tmp) {
return ;
}
p_tmp->num= num;
p_tmp->left.p_node = NULL;
p_tmp->right.p_node = NULL;
p_tr->p_node = p_tmp;
}
//中序遍历函数
void tree_miter(tree *p_tree, void(*p_func)(int)) {
if (!(p_tree->p_node)) {
return ;
}
tree_miter(&(p_tree->p_node->left), p_func);
p_func(p_tree->p_node->num);
tree_miter(&(p_tree->p_node->right), p_func);
}
//前序遍历函数
void tree_fiter(tree *p_tree, void(*p_func)(int)) {
if (!(p_tree->p_node)) {
return ;
}
p_func(p_tree->p_node->num);
tree_fiter(&(p_tree->p_node->left), p_func);
tree_fiter(&(p_tree->p_node->right), p_func);
}
//后序遍历函数
void tree_liter(tree *p_tree, void(*p_func)(int)) {
if (!(p_tree->p_node)) {
return ;
}
tree_liter(&(p_tree->p_node->left), p_func);
tree_liter(&(p_tree->p_node->right), p_func);
p_func(p_tree->p_node->num);
}
//从有序二叉树里删除一个数字的函数
void tree_remove(tree *p_tree, int num) {
node *p_remove = NULL, *p_left = NULL, *p_right = NULL;
tree *p_tmp = tree_search_in_order(p_tree, num);
if (!(p_tmp->p_node)) {
return ;
}
p_remove = p_tmp->p_node;
p_left = p_remove->left.p_node;
p_right = p_remove->right.p_node;
if (!p_left) {
p_tmp->p_node = p_right;
}
else if (!p_right) {
p_tmp->p_node = p_left;
}
else {
tree *p_tmp1 = tree_search_in_order(&(p_remove->left),p_right->num);
p_tmp1->p_node = p_right;
p_tmp->p_node = p_left;
}
free(p_remove);
p_remove = NULL;
}
编写头文件:02tree.h
#ifndef __02TREE_H__
#define __02TREE_H__
struct node;
typedef struct {
struct node *p_node;
} tree;
typedef struct node {
int num;
tree left;
tree right;
} node;
//初始化函数
void tree_init(tree *);
//清理函数
void tree_deinit(tree *);
//在有序二叉树里查找某个数字所在的位置
tree *tree_search_in_order(const tree *,int );
//在有序二叉树里插入新数字
void tree_insert_in_order(tree *, int );
//中序遍历函数
void tree_miter(tree *, void (*)(int));
//前序遍历函数
void tree_fiter(tree *, void (*)(int));
//后序遍历函数
void tree_liter(tree *, void (*)(int));
//从有序二叉树里删除数字的函数
void tree_remove(tree *, int);
#endif //__02TREE_H__
编写主函数:02main.c
#include <stdio.h>
#include "02tree.h"
void print_cb(int num) {
printf("%d ", num);
}
int main() {
tree tr = {0};
tree_init(&tr);
tree_insert_in_order(&tr, 50);
tree_insert_in_order(&tr, 25);
tree_insert_in_order(&tr, 80);
tree_insert_in_order(&tr, 13);
tree_insert_in_order(&tr, 37);
tree_insert_in_order(&tr, 61);
tree_insert_in_order(&tr, 93);
tree_insert_in_order(&tr, 7);
tree_remove(&tr, 25);
tree_miter(&tr, print_cb);
printf("\n");
tree_deinit(&tr);
return 0;
}
- Day19、树的完整版代码
- 日历代码的完整版
- day19-day21代码片段
- Day19-文件的操作
- day19
- day19
- day19
- Day19
- day19
- day19
- DAY19
- ruby统计git管理的代码完整版
- 二叉树功能的完整版
- 超全面的JavaWeb笔记day19<Service>
- 论坛完整版ubb代码
- RGBYUV420代码完整版
- java 计算器完整版,代码!
- 完整版单例代码
- Vivado HLS从HDL到模型和C的描述(1):从运行一个程序开始
- 关于连续天数的几个思路。
- Android中使用SDcard进行文件的读取
- PNG文件格式
- Android项目重构之路:实现篇
- Day19、树的完整版代码
- Shape,Selector
- Cocos2d-x 3.X 事件分发机制
- 嵌入式复习9
- 开发记录---python爬虫之gooseeker尝试
- aptitude命令的使用
- 疑问解答
- 闲杂小记(l六)
- hdu3535AreYouBusy(分组背包问题)