二叉树——c

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30648823/article/details/79764692
// 二叉树.cpp: 定义控制台应用程序的入口点。
//			   三叉链表

#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"

/****************
测试数据
A
B
#
D
F
#
#
G
#
#
C
#
E
#
H
#
#
  left  左节点 
  right 右节点
  top   上节点
  data  数据
*****************/
typedef struct erChaShu {
	char data;
	struct erChaShu *left, *right;
}ErChaShu;

//写入(先序遍历)ABD##E#F##c##
ErChaShu *Add(ErChaShu *E) {
	char ch;
	scanf_s(" %c", &ch);
	if (ch == '#') {
		E = NULL;
	}else {
		E = (ErChaShu *)malloc(sizeof(erChaShu));
		E->data = ch;
		E->left = Add(E->left);
		E->right = Add(E->right);
	}
	return E;
}
//打印当前元素
void Print(ErChaShu *p) {
	if (p->data != '#')
		printf("%5c", p->data);
}
//先序遍历
void XianXu(ErChaShu *p) {
	if (p != NULL) {
		Print(p);
		XianXu(p->left);
		XianXu(p->right);
	}
}

//中序遍历
void ZhongXu(ErChaShu *p) {
	if (p != NULL) {
		ZhongXu(p->left);
		Print(p);
		ZhongXu(p->right);
	}
}
//后续遍历
void HouXu(ErChaShu *p) {
	if (p != NULL) {
		HouXu(p->left);
		HouXu(p->right);
		Print(p);
	}
}

//求深度
int Height(ErChaShu *E) {
	int l, r;
	if (E != NULL) {
		l = Height(E->left);
		r = Height(E->right);
		if (l > r)return l+1;
		return r+1;
	}
	else return 0;
}


int main()
{
	//写入
	ErChaShu *E;
	E = NULL;
	E = Add(E);
	
	//先序遍历
	printf("先序遍历\n");
	XianXu(E);

	//中序遍历
	printf("\n中序遍历\n");
	ZhongXu(E);

	//后续遍历
	printf("\n后续遍历\n");
	HouXu(E);

	//求深度
	printf("\n深度为%d\n", Height(E));

	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_30648823/article/details/79764692
今日推荐