Problem Description
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。
Input
输入一个长度小于50个字符的字符串。
Output
输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
Example Input
abc,,de,g,,f,,,
Example Output
cbegdfa
cgefdba
3
5
code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node
{
char data;
struct node *lchild, *rchild;
};
char s[55];
int cnt, t;
struct node *creatbitree()
{
struct node *root;
if(s[++cnt]==',') root = NULL;
else
{
root = (struct node*)malloc(sizeof(struct node));
root->data = s[cnt];
root->lchild = creatbitree();
root->rchild = creatbitree();
}
return root;
}
void visit(struct node *root)
{
printf("%c", root->data);
}
void InOrder(struct node *root)
{
if(root!=NULL)
{
InOrder(root->lchild);
visit(root);
InOrder(root->rchild);
}
}
void PostOrder(struct node *root)
{
if(root!=NULL)
{
PostOrder(root->lchild);
PostOrder(root->rchild);
visit(root);
}
}
void leafcount(struct node *root)
{
if(root)
{
if((!root->lchild)&&(!root->rchild))
{
t++;
}
leafcount(root->lchild);
leafcount(root->rchild);
}
}
int max(int a, int b)
{
if(a>b) return a;
else return b;
}
int hight(struct node *root)
{
if(root==NULL) return 0;
else return max(hight(root->lchild), hight(root->rchild))+1;
}
int main()
{
struct node *root;
cnt = -1;
scanf("%s", s);
root = creatbitree();
InOrder(root);
printf("\n");
PostOrder(root);
printf("\n");
int high = hight(root);
leafcount(root);
printf("%d\n%d\n", t, high);
}
#include<stdlib.h>
#include<string.h>
struct node
{
char data;
struct node *lchild, *rchild;
};
char s[55];
int cnt, t;
struct node *creatbitree()
{
struct node *root;
if(s[++cnt]==',') root = NULL;
else
{
root = (struct node*)malloc(sizeof(struct node));
root->data = s[cnt];
root->lchild = creatbitree();
root->rchild = creatbitree();
}
return root;
}
void visit(struct node *root)
{
printf("%c", root->data);
}
void InOrder(struct node *root)
{
if(root!=NULL)
{
InOrder(root->lchild);
visit(root);
InOrder(root->rchild);
}
}
void PostOrder(struct node *root)
{
if(root!=NULL)
{
PostOrder(root->lchild);
PostOrder(root->rchild);
visit(root);
}
}
void leafcount(struct node *root)
{
if(root)
{
if((!root->lchild)&&(!root->rchild))
{
t++;
}
leafcount(root->lchild);
leafcount(root->rchild);
}
}
int max(int a, int b)
{
if(a>b) return a;
else return b;
}
int hight(struct node *root)
{
if(root==NULL) return 0;
else return max(hight(root->lchild), hight(root->rchild))+1;
}
int main()
{
struct node *root;
cnt = -1;
scanf("%s", s);
root = creatbitree();
InOrder(root);
printf("\n");
PostOrder(root);
printf("\n");
int high = hight(root);
leafcount(root);
printf("%d\n%d\n", t, high);
}