#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <malloc.h>
#define MAX 100
using namespace std;
typedef struct BinTreeNode {
char data;
BinTreeNode *left, *right;
}BinTreeNode,*BinTree;
BinTree Creat(BinTree T){
char ch;
cin >>ch;
if (ch == '#')
T = NULL;
else {
T = (BinTreeNode *)malloc(sizeof(BinTreeNode));
if (!T) printf("分配错误\n");
else {
T->data = ch;
T->left = Creat(T->left);
T->right = Creat(T->right);
}
}
return T;
}
void XX(BinTree T) {
if (T) {
printf("%c",T->data);
XX(T->left);
XX(T->right);
}
}
void ZX(BinTree T) {
if (T) {
ZX(T->left);
printf("%c",T->data);
ZX(T->right);
}
}
void HX(BinTree T) {
if (T) {
HX(T->left);
HX(T->right);
printf("%c",T->data);
}
}
void CC(BinTree T) {
if (T) {
queue<BinTree> q;
q.push(T);
while (!q.empty()) {
BinTree p = q.front();
q.pop();
if (p->left) q.push(p->left);
if (p->right) q.push(p->right);
printf("%c",p->data);
}
}
}
int Height(BinTree T) {
int l, r,Max;
if (T) {
l = Height (T->left);
r = Height (T->right);
Max = max(l,r);
return Max+1;
}
return 0;
}
int Depth(BinTree T) {
int l,r,Max;
if (T) {
l = Depth(T->left);
r = Depth(T->right);
Max = max(l,r);
return Max + 1;
}
return 0;
}
int main () {
BinTree T, root;
printf("请输入字符串,#代表该节点为空\n");
root = Creat(T);
printf("\n树的前序遍历为:\n");
XX(root);
printf("\n树的中序遍历为:\n");
ZX(root);
printf("\n树的后序遍历为:\n");
HX(root);
printf("\n树的层次遍历为:\n");
CC(root);
printf("\n数的高度为\n");
printf("%d",Height(root));
printf("\n树的深度为\n");
printf("%d\n",Depth(root));
}