二叉查找树

头文件定义:

#ifndef BTREE_H
#define BTREE_H

#define BTRUE (1)
#define BFALSE (0)

/* orderType  */
#define PRE_ORDER (1)
#define IN_ORDER (2)
#define POST_ORDER (3)

typedef struct BTree
{
	int value;
	struct BTree* leftTree;
	struct BTree* rightTree;
}BTree_S;

BTree_S* createBTree(int arr[], int arrLen);
void traversalBTree(BTree_S* root, int delFlag, int orderType);

#endif

二叉查找树实现:

#include <stdio.h>
#include <malloc.h>
#include <memory.h>
#include "bTree.h"

BTree_S* createNode(int nodeValue)
{
	BTree_S* node = NULL;
	
	node = (BTree_S*)malloc(sizeof(BTree_S));
	if(NULL == node)
	{
		printf("malloc node(%d) failed.", nodeValue);
		return NULL;
	}
	memset(node, 0, sizeof(BTree_S));
	node->value = nodeValue;

	return node;
}

void insertNodeIntoBTree(BTree_S *root, int nodeValue)
{
	if(nodeValue <= root->value)
	{
		if(NULL == root->leftTree)
		{
			root->leftTree = createNode(nodeValue);
		}
		else
		{
			insertNodeIntoBTree(root->leftTree, nodeValue);
		}
	}
	else
	{
		if(NULL == root->rightTree)
		{
			root->rightTree = createNode(nodeValue);
		}
		else
		{
			insertNodeIntoBTree(root->rightTree, nodeValue);
		}
	}
}

BTree_S* createBTree(int arr[], int arrLen)
{
	int index = 0;
	BTree_S* root = NULL;

	/* create root node using arr[0] */
	root = createNode(arr[0]);
	if(NULL == root)
	{
		return NULL;
	}

	/* traverse arr[1..arrLen-1], insert key into created BTree */
	for(index = 1; index < arrLen; index++)
	{
		insertNodeIntoBTree(root, arr[index]);
	}

	return root;
}

void traverseBTree(BTree_S* root, int delType, int orderType)
{
	if(NULL == root)
	{
		return;
	}

	if(PRE_ORDER == orderType)
	{
		printf("%d ", root->value);
	}
	traverseBTree(root->leftTree, delType, orderType);
	if(IN_ORDER == orderType)
	{
		printf("%d ", root->value);
	}
	traverseBTree(root->rightTree, delType, orderType);
	if(POST_ORDER == orderType)
	{
		printf("%d ", root->value);
	}

	if(BTRUE == delType)
	{
		//printf("[del %d] ", root->value);
		free(root);
		root = NULL;
	}

	return;
}

测试代码:

#include <stdio.h>
#include "bTree.h"

int main()
{
	int arr[] = {10, 2, 27,9, 8, 15, 50, 1};
	int arrLen = sizeof(arr) / sizeof(int);
	BTree_S *root = NULL;

	root = createBTree(arr, arrLen);

	traverseBTree(root, BTRUE, IN_ORDER);
	printf("\n");
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值