数据结构实验之二叉树的建立与遍历
题目描述
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。
输入
输入一个长度小于50个字符的字符串。
输出
输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
示例输入
abc,,de,g,,f,,,
示例输出
cbegdfa cgefdba 3 5
#include <iostream> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<malloc.h> using namespace std; struct node { char data; struct node *left,*right; }*tree; struct node*build(struct node*tree) { char c; if((c=getchar())==',') tree=NULL; else { tree=(struct node*)malloc(sizeof(struct node)); tree->data=c; tree->left=build(tree->left); tree->right=build(tree->right); } return tree; } void zhongxu(struct node *tree) { if(tree!=NULL) { zhongxu(tree->left); printf("%c",tree->data); zhongxu(tree->right); } } void houxu(struct node *tree) { if(tree!=NULL) { houxu(tree->left); houxu(tree->right); printf("%c",tree->data); } } int num=0; int yejie(struct node *tree) { if(tree!=NULL) { if(tree->left==NULL&&tree->right==NULL) num++; yejie(tree->left); yejie(tree->right); } return num; } int shendu(struct node *tree) { int hl,hr; if(tree==NULL) return 0; else { hl=shendu(tree->left); hr=shendu(tree->right); } if(hl>hr) return hl+1; else return hr+1; } int main() { struct node *t; t=(struct node*)malloc(sizeof(struct node)); t=build(tree); zhongxu(t); printf("\n"); houxu(t); printf("\n"); printf("%d\n",yejie(t)); printf("%d\n",shendu(t)); }