二叉树的建立、节点查找以及节点删除C和C++实现

程序是建立一颗二叉排序树,查找节点找到了返回其父节点,失败的时候返回NULL,删除节点分为四种情况:1、左子树和右子树都为空;2、左子树为空,右子树不为空;3、左子树不为空,右子树为空;4、左子树和右子树都不为空。

C语言版本(利用结构体实现):

#include <stdio.h>
#include <stdlib.h>
 
typedef int DataType;
 
typedef struct BTree{
	DataType data;
	struct BTree *Tleft;
	struct BTree *Tright;	
}*BTree;

BTree CreateTree(); //建树 
BTree insert(BTree root, DataType data);//插入节点 
void InBTree(BTree root); //中序遍历 
void PreBTree(BTree root); //先序遍历 
void PostBTree(BTree root);//后序遍历 
BTree findPostion(BTree root, int deleteNode, int *flags);//寻找合适的插入点 
BTree delNode(BTree root, BTree parent, int flags); //删除树节点 

int main(){
	BTree root = NULL;
	int flags = 0;
	int deleteNode = 0; 
	BTree parent = NULL;//所删除节点的父节点 
	char choiceAgain = 'Y'; 
	root = CreateTree();
	printf("\n中序遍历: ");
	InBTree(root); 
	printf("\n前序遍历: "); 
	PreBTree(root);
	printf("\n后序遍历: ");
	PostBTree(root);
	printf("\n"); 
	
	do{	
		printf("需要删掉的节点: ");
		scanf("%d", &deleteNode); 
		parent = findPostion(root, deleteNode, &flags);
		root = delNode(root, parent, flags); 
		printf("删除后的结果: "); 
		printf("\n中序遍历: ");
		InBTree(root); 
		printf("\n前序遍历: ");
		PreBTree(root); 
		printf("\n后序遍历: ");
		PostBTree(root);
		choiceAgain = 'N';
		printf("\nDelete Again(Y) or N?: ");
		getchar(); 
		scanf("%c", &choiceAgain); 
	}while(choiceAgain == 'Y' || choiceAgain == 'y'); 
	
	printf("\nDone!\n"); 
	return 0; 
}

BTree CreateTree(){
	BTree root = NULL;
	DataType temp = 0;
	printf("请输入节点,以0结尾:\n"); 
	scanf("%d", &temp); 
	while(temp != 0){
	    root = insert(
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值