二叉搜索树学习改编代码

tree.h

#ifndef TREE_H
#define TREE_H
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>

typedef struct
{
int key;
char value[20];
}DATA, *LPDATA;
typedef struct treenode
{
DATA data;
struct treenode *LChild;
struct treenode *RChild;
}NODE, *LPNODE;
typedef struct binarySearchTree
{
LPNODE root;
int treeSize;
}BST, *LPBST;

//传入数据
LPNODE createNode(DATA data);
LPBST createBST();
int size(LPBST tree);
int empty(LPBST tree);
void insertNode(LPBST tree, DATA data);
void printNode(LPNODE curNode);
void midOrder(LPNODE tree);
LPNODE searchBST(LPBST tree, int key);
void deleteNode(LPBST tree, int key);

#endif

tree.c

#include "tree.h"

//传入数据
LPNODE createNode(DATA data)
{
	LPNODE newnode = (LPNODE)malloc(sizeof(NODE));
	assert(newnode);
	newnode->data = data;
	newnode->LChild = NULL;
	newnode->RChild = NULL;
	return newnode;
}

LPBST createBST()
{
	LPBST tree = (LPBST)malloc(sizeof(BST));
	assert(tree);
	tree->root = NULL;
	tree->treeSize = 0;
	return tree;
}

int size(LPBST tree)
{
	return tree->treeSize;
}

int empty(LPBST tree)
{
	return  tree==NULL?0:tree->treeSize == 0;
}

void insertNode(LPBST tree, DATA data)
{
	LPNODE newNode = createNode(data);
	LPNODE pmove = tree->root;
	LPNODE prepmove = NULL;
	while (pmove != NULL)
	{
		prepmove = pmove;
		if(pmove->data.key > data.key)
		{
			pmove = pmove->LChild;
		}
		else if(pmove->data.key < data.key)
		{
			pmove = pmove->RChild;
		}
		else
		{
			strncpy(pmove->data.value, data.value, 20);
			return ;
		}
	}
	
	if(tree->root == NULL)
	{
		tree->root = newNode;
	}
	else
	{
		if(prepmove->data.key > data.key)
		{
			prepmove->LChild = newNode;
		}
		else
		{
			prepmove->RChild = newNode;
		}
	}
	tree->treeSize++;
}

void printNode(LPNODE curNode)
{
	printf("%d:%s\n", curNode->data.key, curNode->data.value);
	return ;
}


//遍历树
void midOrder(LPNODE tree)
{
	if(tree != NULL)
	{
		midOrder(tree->LChild);
		printNode(tree);
		midOrder(tree->RChild);
	}
	return ;
}

test.c

#include "tree.h"
int main()
{
	int i;
	LPBST tree = createBST();                                 //创建二叉搜索树
	DATA data[8] = { 10,"张三",5,"李四",49,"王五",2,"小芳",
					18,"小黑",89,"小红",0,"小明",22,"小花" };    
	for (i = 0; i < 8; i++) 
	{
		insertNode(tree, data[i]);                            //插入数据
	}
	midOrder(tree->root);
	return 0;
}

Makefile

tree:tree.c test.c
	gcc -o tree tree.c test.c
clean:
	rm *.o
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值