实现基本二叉树操作

本文介绍了一个简单的二叉搜索树的实现,包括插入、删除、查找最小值和最大值等基本操作,并通过一个示例展示了如何使用这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//mytree.h
#pragma once
typedef int ElemType;
#ifndef _MYTREE_H_
#define _MYTREE_H_
struct TreeNode;
typedef struct TreeNode *SearchTree;
typedef struct TreeNode *Position;

void MakeEmpty(SearchTree tree);
SearchTree Insert(SearchTree tree, ElemType x);
SearchTree Delete(SearchTree tree, ElemType x);
Position find(SearchTree tree, ElemType x);
Position findMin(SearchTree tree);
Position findMax(SearchTree tree);
void printTree(SearchTree tree,ElemType n);
ElemType Retrieve(Position tree);

#endif

struct TreeNode
{
	ElemType element;
	SearchTree left;
	SearchTree right;
};


//mytree.cpp
#include <stdlib.h>
#include <stdio.h>
#include "mytree.h"

void MakeEmpty(SearchTree tree)
{
	while (tree != NULL)
	{
		MakeEmpty(tree->left);
		MakeEmpty(tree->right);
		free(tree);
	}
}

SearchTree Insert(SearchTree tree, ElemType x)
{
	if (tree == NULL)
	{
		tree = (SearchTree)malloc(sizeof(struct TreeNode));
		if (tree == NULL)
			return NULL;
		else
		{
			tree->element = x;
			tree->left = NULL;
			tree->right = NULL;
			return tree;
		}

	}
	else if (x < tree->element)
		tree->left=Insert(tree->left, x);
	else if (x > tree->element)
		tree->right=Insert(tree->right, x);
	return tree;
}
SearchTree Delete(SearchTree tree, ElemType x)
{
	SearchTree tempTree = NULL;
	if (tree == NULL)
		return NULL;
	else
	{
		if (x < tree->element)
			tree->left = Delete(tree->left, x);
		else if (x>tree->element)
			tree->right = Delete(tree->right, x);
		else
		{
			if (tree->left&&tree->right)
			{
				tempTree = findMin(tree->right);
				tree->element = tempTree->element;
				tree->right = Delete(tree->right, tempTree->element);
			}
			else
			{
				if (tree->left == NULL)
				{
					tempTree = tree;
					tree = tree->right;

				}
				else if (tree->right == NULL)
				{
					tempTree = tree;
					tree = tree->left;
				}
				else
					tree = NULL;
				free(tempTree);
			}
		}
	}
	return tree;
		
		
		

}

Position find(SearchTree tree, ElemType x)
{
	if (tree == NULL)
	{
		return NULL;
	}
	else if (x < tree->element)
	{
		return find(tree->left, x);
	}
	else if (x>tree->element)
		return find(tree->right, x);
	else
		return tree;
}
Position findMin(SearchTree tree)
{
	if (tree == NULL)
		return NULL;
	else
	{
		if (tree->left != NULL)
			return findMin(tree->left);
		else
			return tree;
	}
}
Position findMax(SearchTree tree)
{
	if (tree == NULL)
		return NULL;
	else
	{
		if (tree->right != NULL)
			return findMax(tree->right);
		else
			return tree;
	}
}
void printTree(SearchTree tree,ElemType n)
{
	int m = n;
	if (tree == NULL)
		
		return;
	else
	{
		while (--m)
		{
			printf(" ");
		}
		printf("%d\n",tree->element);
		printTree(tree->left, n + 1);
		printTree(tree->right, n + 1);
	}
}

ElemType Retrieve(Position tree)
{
	if (tree != NULL)
		return tree->element;
	else
		return -1;
}

//main.cpp
#include <stdlib.h>
#include <stdio.h>
#include "mytree.h"

int main(int *argc, int *args[])
{
	SearchTree tree = NULL;
	int number = 15;
	MakeEmpty(tree);
	tree = Insert(tree, 10);
	tree = Insert(tree, 12);
	tree = Insert(tree, 8);
	tree = Insert(tree, 15);
	tree = Insert(tree, 9);
	tree = Insert(tree, 6);
	printTree(tree, 1);
	printf("\n\n");

	printf("findMin=%d\n", Retrieve(findMin(tree)));

	printf("findMax=%d\n", Retrieve(findMax(tree)));

	printf("find%d = %d\n", number, Retrieve(find(tree, number)));

	tree = Delete(tree, 15);
	tree = Delete(tree, 8);
	tree = Delete(tree, 6);
	tree = Delete(tree, 11);
	tree = Delete(tree, 10);
	tree = Delete(tree, 12);
	tree = Delete(tree, 9);
	printTree(tree, 1);
	printf("\n\n");

	system("PAUSE");
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值