#include <stdlib.h>
#include <stdio.h>
int rear = 0, front = 0;
typedef struct Tree {
int data;
struct Tree *lChild, *rChild;
} node, *BiTree;
void PreOrderTree(node *root) {
if (root == NULL) {
return;
}
printf("%c ", root->data);
PreOrderTree(root->lChild);
PreOrderTree(root->rChild);
}
void InOrderTree(node *root) {
if (root == NULL) {
return;
}
InOrderTree(root->lChild);
printf("%c ", root->data);
InOrderTree(root->rChild);
}
void AfterOrderTree(node *root) {
if (root == NULL) {
return;
}
AfterOrderTree(root->lChild);
AfterOrderTree(root->rChild);
printf("%c ", root->data);
}
void createBiTree(node **root) {
char ch;
scanf("%c", &ch);
if (ch == '.') {
return;
}
*root = (node *) malloc(sizeof(node));
(*root)->data = ch;
(*root)->rChild = NULL;
(*root)->lChild = NULL;
createBiTree(&((*root)->lChild));
createBiTree(&((*root)->rChild));
}
node *create() {
char ch;
ch = getchar();
if (ch == '.') {
return NULL;
} else {
node *root = malloc(sizeof(node));
root->data = ch;
root->lChild = create();
root->rChild = create();
return root;
}
}
int DepthTree(BiTree root) {
if (root == NULL) {
return 0;
} else {
int m = DepthTree(root->lChild);
int n = DepthTree(root->rChild);
if (m > n) {
return m + 1;
} else {
return n + 1;
}
}
}
int getNodeNum(node *root) {
if (root == NULL)
return 0;
else
return getNodeNum(root->lChild) + getNodeNum(root->rChild) + 1;
}
int getLeafNodeNum() {
}
void printTree(node* root,int index){
if (root == NULL){
return;
}
printTree(root->rChild,index+1);
for (int i = 0; i < index; ++i) {
printf(" ");
}
printf("%c\n",root->data);
printTree(root->lChild,index+1);
}
int main() {
node *root;
root = create();
printf("PreOrder:\n");
PreOrderTree(root);
printf("\nInOrderOrder:\n");
InOrderTree(root);
printf("\nAfterOrder:\n");
AfterOrderTree(root);
printf("\nLeaf node number:%d\n", getNodeNum(root));
printTree(root,1);
printf("\nBinary Tree depth:%d\n",DepthTree(root));
return 0;
}