数据结构实验之二叉树的建立与遍历
2013-06-28 20:53
344 查看
题目描述
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。输入
输入一个长度小于50个字符的字符串。输出
输出共有4行:第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
示例输入
abc,,de,g,,f,,,
示例输出
cbegdfa cgefdba 3 5
#include<stdio.h> #include<string.h> #include<stdlib.h> struct tree { char data; struct tree *lchild; struct tree *rchild; }; struct tree *creat(struct tree *bt,int k) { struct tree *p; char x; p=(struct tree *)malloc(sizeof(struct tree)); scanf("%c",&x); if(x!=',') { if(!(p=(struct tree *)malloc(sizeof(struct tree)))) exit(0); p->data=x; p->lchild=NULL; p->rchild=NULL; if(k==0) bt=p; if(k==1) bt->lchild=p; if(k==2) bt->rchild=p; creat(p,1); creat(p,2); } return (bt); } int visit1(struct tree *bt) { if(bt!=NULL) { visit1(bt->lchild); printf("%c",bt->data); visit1(bt->rchild); } return 0; } int visit2(struct tree *bt) { if(bt!=NULL) { visit2(bt->lchild); visit2(bt->rchild); printf("%c",bt->data); } return 0; } int leaf (struct tree *bt) { if(!bt) return 0; else if(!bt->lchild&&!bt->rchild) return 1; else return (leaf(bt->lchild)+leaf(bt->rchild)); } int deep (struct tree *bt) { int d=0; if(bt) { int lchilddeep=deep(bt->lchild); int rchilddeep=deep(bt->rchild); d=lchilddeep>=rchilddeep?lchilddeep+1:rchilddeep+1; } return d; } int main () { struct tree *p; p=(struct tree *)malloc(sizeof(struct tree)); p=creat(p,0); visit1(p); printf("\n"); visit2(p); printf("\n"); printf("%d\n",leaf(p)); printf("%d\n",deep(p)); return 0; }
View Code
相关文章推荐
- 数据结构实验之二叉树的建立与遍历
- SDUT-数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 【数据结构实验】二叉树的建立以及遍历
- 数据结构实验之二叉树的建立与遍历
- SDUT 2136 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历 ( sdut oj2136)
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 暑假集训 8.8 sdut2136 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历(万能了,水)
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- acm sdut 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 2136数据结构实验之二叉树的建立与遍历
- SDUT 2136 数据结构实验之二叉树的建立与遍历
- 数据结构实验之 二叉树的建立与遍历