一.binary_search_tree.h头文件的声明,如下:
#ifndef BINARY_SEARCH_TREE_H
#define BINARY_SEARCH_TREE_Htypedef struct TreeNode* link;
struct TreeNode{
unsigned char item;
link left;
link right;
};
link search(link t, int key);
link insert(link t, int key);
link deleteNode(link t, int key);
void printTree(link t);
#endif
二.binary_search_tree.cpp的实现,如下:
#include <stdio.h>
#include "binary_search_tree.h"
static link createNode(unsigned char item){
link p = (link)malloc(sizeof(*p));
p->item = item;
p->left = NULL;
p->right = NULL;
return p;
}
static void releaseNode(link p){
free(p);
}
link search(link t, int key){
if(t == NULL){
return NULL;
}
if(t->item > key){
return search(t->left, key);
}
if(t->item < key){
return search(t->right, key);
}
return t;
}
link insert(link t, int key){
if(t == NULL){
return createNode(key);
}
if(t->item > key){
t->left = insert(t->left, key);
}else{
t->right = insert(t->right, key);
}
return t;
}
link deleteNode(link t, int key){
link p;
if(t == NULL){
return NULL;
}
if(t->item > key){
t->left = deleteNode(t->left, key);
}else if(t->item < key){
t->right = deleteNode(t->right, key);
}else{
if(t->left == NULL && t->right == NULL){
releaseNode(t);
t = NULL;
}else if(t->left != NULL){
for(p=t->left;p->right != NULL;p=p->right);
t->item = p->item;
t->left = deleteNode(t->left, t->item);
}else if(t->right != NULL){
for(p=t->right;p->left != NULL;p=p->left);
t->item = p->item;
t->right = deleteNode(t->right, t->item);
}
}
return t;
}
void printTree(link t){
if(t != NULL){
printf("(");
printf("%d", t->item);
printTree(t->left);
printTree(t->right);
printf(")");
}else{
printf("()");
}
}
三.main.cpp的实现,如下:
#include <stdlib.h>
#include <time.h>
#include "binary_search_tree.h"
#define RANGE 100
#define N 6
void printItem(link p){
printf("%d", p->item);
}
int main(int argc, char** argv){
int i = 0;
int key = 0;
link root = NULL;
srand(time(NULL));
for(i=0;i<N;++i){
root = insert(root, rand() % RANGE);
}
printf("\t\\tree");
printTree(root);
printf("\n\n");
while(root){
key = rand() % RANGE;
if(search(root, key)){
printf("delete %d in tree\n", key);
root = deleteNode(root, key);
printf("\t\\tree");
printTree(root);
printf("\n\n");
}
}
return 0;
}
说明:代码简单明了,无需赘述。
参考文献:宋劲彬,linux c编程一站式学习
本文介绍如何在Linux环境下使用C/C++编程实现排序二叉树,包括binary_search_tree.h头文件的声明,binary_search_tree.cpp的具体实现以及main.cpp的应用示例。
130

被折叠的 条评论
为什么被折叠?



