[每日练习]C编程实现二叉树
来源:互联网 发布:mac cs6破解方法 编辑:程序博客网 时间:2024/04/30 19:22
#include <stdio.h>
#include <stdlib.h>
typedef struct _Btree {
int value;
struct _Btree *left;
struct _Btree *right;
} Btree;
void Btree_insert(Btree **node, int value)
{
Btree *b = *node;
if (b == NULL)
{
b = (Btree *)malloc(sizeof(Btree));
if(b == NULL)
{
printf("allocate memory failed\n");
return;
}
b->left = NULL;
b->right = NULL;
b->value = value;
*node = b;
}
else if (value < b->value)
{
Btree_insert(&b->left, value);
}
else
{
Btree_insert(&b->right, value);
}
}
Btree *Btree_find(Btree *node, int value)
{
if(node == NULL)
return NULL;
if(node->value == value)
return node;
else if(node->value > value)
return Btree_find(node->left, value);
else
return Btree_find(node->right, value);
}
Btree **Btree_findMin(Btree **node)
{
Btree *b = *node;
if(b->left)
return Btree_findMin(&b->left);
else
return node;
}
Btree **Btree_findMax(Btree **node)
{
Btree *b = *node;
if(b->right)
return Btree_findMax(&b->right);
else
return node;
}
void Btree_remove(Btree **node, int value)
{
Btree *b = *node;
if(b->value == value)
{
if(b->left == NULL)
{
*node = b->right;
free(b);
}
else if(b->right == NULL)
{
*node = b->left;
free(b);
}
else
{
Btree **fb = Btree_findMax(&b->left);
b->value = (*fb)->value;
Btree_remove(fb, value);
}
}
else if(b->value > value)
Btree_remove(&b->left, value);
else
Btree_remove(&b->right, value);
}
int main()
{
Btree *root = NULL;
Btree *node, **foundNode;
int element[] = {2,3,6,1,10,4,2,8,7};
int i;
for(i=0; i<sizeof(element)/sizeof(int); i++)
{
Btree_insert(&root, element[i]);
}
Btree_remove(&root, 4);
if(node = Btree_find(root, 10))
{
printf("found node->value = %d\n", node->value);
}
if(node = Btree_find(root, 4))
{
printf("found node->value = %d\n", node->value);
}
else
printf("not found\n");
Btree_insert(&root, 0);
Btree_insert(&root, 20);
Btree_remove(&root, 20);
foundNode = Btree_findMin(&root);
printf("Min node->value = %d\n", (*foundNode)->value);
foundNode = Btree_findMax(&root);
printf("Max node->value = %d\n", (*foundNode)->value);
return 0;
}
#include <stdlib.h>
typedef struct _Btree {
int value;
struct _Btree *left;
struct _Btree *right;
} Btree;
void Btree_insert(Btree **node, int value)
{
Btree *b = *node;
if (b == NULL)
{
b = (Btree *)malloc(sizeof(Btree));
if(b == NULL)
{
printf("allocate memory failed\n");
return;
}
b->left = NULL;
b->right = NULL;
b->value = value;
*node = b;
}
else if (value < b->value)
{
Btree_insert(&b->left, value);
}
else
{
Btree_insert(&b->right, value);
}
}
Btree *Btree_find(Btree *node, int value)
{
if(node == NULL)
return NULL;
if(node->value == value)
return node;
else if(node->value > value)
return Btree_find(node->left, value);
else
return Btree_find(node->right, value);
}
Btree **Btree_findMin(Btree **node)
{
Btree *b = *node;
if(b->left)
return Btree_findMin(&b->left);
else
return node;
}
Btree **Btree_findMax(Btree **node)
{
Btree *b = *node;
if(b->right)
return Btree_findMax(&b->right);
else
return node;
}
void Btree_remove(Btree **node, int value)
{
Btree *b = *node;
if(b->value == value)
{
if(b->left == NULL)
{
*node = b->right;
free(b);
}
else if(b->right == NULL)
{
*node = b->left;
free(b);
}
else
{
Btree **fb = Btree_findMax(&b->left);
b->value = (*fb)->value;
Btree_remove(fb, value);
}
}
else if(b->value > value)
Btree_remove(&b->left, value);
else
Btree_remove(&b->right, value);
}
int main()
{
Btree *root = NULL;
Btree *node, **foundNode;
int element[] = {2,3,6,1,10,4,2,8,7};
int i;
for(i=0; i<sizeof(element)/sizeof(int); i++)
{
Btree_insert(&root, element[i]);
}
Btree_remove(&root, 4);
if(node = Btree_find(root, 10))
{
printf("found node->value = %d\n", node->value);
}
if(node = Btree_find(root, 4))
{
printf("found node->value = %d\n", node->value);
}
else
printf("not found\n");
Btree_insert(&root, 0);
Btree_insert(&root, 20);
Btree_remove(&root, 20);
foundNode = Btree_findMin(&root);
printf("Min node->value = %d\n", (*foundNode)->value);
foundNode = Btree_findMax(&root);
printf("Max node->value = %d\n", (*foundNode)->value);
return 0;
}
0 0
- [每日练习]C编程实现二叉树
- [每日练习]C编程实现句子中的单词反转
- 【编程练习】二叉查找树原理及基本操作编程(GNU C实现)
- 【编程练习】二叉树的反转,Java和Python实现
- [C练习]编程实现strstr
- [每日练习]编程实现两个正整数的除法
- 【练习】二叉树的实现
- 【每日一题-16】重建二叉树&C模拟实现C++继承多态
- 《剑指Offer》编程练习之二叉树
- 每日算法_编程之美_重建二叉树
- 二叉树 c实现
- 二叉树 C实现
- 二叉树 c 实现
- 编程练习-二叉树(求二叉树的高度)
- C++编程练习(17)----“二叉树非递归遍历的实现“
- C++编程练习(17)----“二叉树非递归遍历的实现“
- 【数据结构练习】二叉树的实现
- 二叉树【数组实现】基础练习
- 第一章 Oracle恢复内部原理(简介)
- 装饰精灵管理系统详细介绍
- opencv读取摄像头图像
- [UI]抽屉菜单DrawerLayout分析(三)
- 手机视频开发技术for Android and IOS
- [每日练习]C编程实现二叉树
- Ubuntu下Shell快捷键操作大集合及部分Bash使用技巧
- hdu 3743(树状数组求逆序数)
- 学习RaphaelJS矢量图形包--Learning Raphael JS Vector Graphics中文翻译(一)
- wins7(64位)下HTK安装、demo运行及常见问题
- Geoimaging Accelerator Aerial 汉密尔顿市220景UltraCam D处理案例
- windows 视频开发
- 第二章 Oracle恢复内部原理(基础数据结构)
- Linux下配置Memcache服务