版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}