C语言数据结构 二叉树 基本操作的实现

C语言数据结构实验代码如下:

//二叉树基本操作的实现
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
typedef int Elemtype;
typedef struct Node {
	Elemtype data;
	struct Node* lchild, * rchild;
}Node, * Tree;
//初始化二叉树
Tree CreateTree(Tree T) {
	Elemtype temp;
	scanf("%d", &temp);
	//判断当前节点是否还有孩子,默认0为标志
	if (temp == 0) {
		T = NULL;//当前分支节点无孩子
	}
	else {
		T = (Node*)malloc(sizeof(Node));
		//判断空间是否创建成功
		if (!T) {
			printf("结点空间创建失败\n");
			return;
		}
		T->data = temp;
		//递归调用创建
		T->lchild = CreateTree(T->lchild);
		T->rchild = CreateTree(T->rchild);
	}
	return T;
}

//先序遍历
void DLR(Tree T) {
	//判断是否为空
	if (T == NULL) {
		return;
	}
	else {
		printf("%d   ", T->data);//根节点
		DLR(T->lchild);//左孩子
		DLR(T->rchild);//右孩子
	}
}

//中序遍历
void LDR(Tree T) {
	//判断是否为空
	if (T == NULL) {
		return;
	}
	else {
		LDR(T->lchild);//左孩子
		printf("%d   ", T->data);//根节点
		LDR(T->rchild);//右孩子
	}
}

//后序遍历
void LRD(Tree T) {
	//判断是否为空
	if (T == NULL) {
		return;
	}
	else {
		LRD(T->lchild);//左孩子
		LRD(T->rchild);//右孩子
		printf("%d   ", T->data);//根节点
	}
}
//获取指定结点的左、右孩子
void GetChilds(Tree T, Elemtype e, int flag) {
	if (T == NULL) {
		return;
	}
	else {
		if (T->data == e) {
			printf("第%d个值为%d的结点的", flag, e);
			if (T->lchild == NULL) {
				printf("左孩子为空");
			}
			else {
				printf("左孩子为 %d ", T->lchild->data);
			}
			if (T->rchild == NULL) {
				printf("右孩子为空\n");
			}
			else {
				printf("右孩子为 %d\n", T->rchild->data);
			}
			flag++;//更新计数器
		}
		GetChilds(T->lchild, e, flag);
		GetChilds(T->rchild, e, flag);
	}
}

//销毁二叉树
void DestroyTree(Tree T) {
	if (T == NULL) {
		return;
	}
	else {
		DestroyTree(T->lchild);
		DestroyTree(T->rchild);
		free(T);
	}
}


//菜单
void menu() {
	Tree T = NULL;
	printf("------------二叉树基本操作的实现------------\n");
	printf("1.建立一个二叉树\n");
	printf("2.退出菜单\n");
	printf("请输入你所选择的操作数:");
	int i = 0;
	while (1) {
		scanf("%d", &i);
		switch (i) {
		case 1:
			T = CreateTree(T);
			break;
		case 2:
			printf("--------------------------------------------");
			return;
		default:
			printf("\n输入的操作数有误,请重新输入:");
		}
		if (i == 1) {
			break;
		}
	}
	while (1) {
		printf("\n");
		printf("1.先序遍历二叉树\n");
		printf("2.中序遍历二叉树\n");
		printf("3.后序遍历二叉树\n");
		printf("4.获取指定结点的左、右孩子\n");
		printf("5.销毁二叉树\n");
		printf("请输入你所选择的操作数:");
		scanf("%d", &i);
		switch (i) {
		case 1:
			printf("先序遍历二叉树为:");
			DLR(T);
			printf("\n");
			break;
		case 2:
			printf("中序遍历二叉树为:");
			LDR(T);
			printf("\n");
			break;
		case 3:
			printf("后序遍历二叉树为:");
			LRD(T);
			printf("\n");
			break;
		case 4: {
			Elemtype e;
			int flag = 1;//定义一个记录结点个数的计数器
			printf("请输入该节点的元素值:");
			scanf("%d", &e);
			GetChilds(T, e, flag);
			break;
		}
		case 5:
			DestroyTree(T);
			printf("二叉树已销毁\n");
			printf("--------------------------------------------");
			return;
			break;
		default:
			printf("\n输入的操作数有误,请重新输入:");
		}
	}
}

//菜单运行
void main() {
	menu();
}


ps.陕理工22级数据结构第三次实验记录 

你可能感兴趣的:(c语言,数据结构,开发语言)