数据结构实验之二叉树的建立与遍历
2015-08-04 08:43
567 查看
题目描述
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。输入
输入一个长度小于50个字符的字符串。输出
输出共有4行:第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
示例输入
abc,,de,g,,f,,,
示例输出
cbegdfa cgefdba 3 5
#include <stdio.h> #include <stdlib.h> #include <string.h> struct node { char data; struct node *l; struct node *r; }; int count =0; struct node *creat(struct node *p) { char c; c=getchar(); if(c==',') p=NULL; else { p=(struct node *)malloc(sizeof (struct node)); p->data=c; p->l=creat(p->l); p->r=creat(p->r); } return p; } void pretravel(struct node *p) { if(p!=NULL) { printf("%c",p->data); pretravel(p->l); pretravel(p->r); } } void intravel(struct node *p) { if(p!=NULL) { intravel(p->l); printf("%c",p->data); intravel(p->r); } } void lasttravel(struct node *p) { if(p!=NULL) { lasttravel(p->l); lasttravel(p->r); printf("%c",p->data); } } int leaves(struct node *p) { if(p!=NULL) { if(p->l==NULL&&p->r==NULL) { count ++; } leaves(p->l); leaves(p->r); } return count ; } int deep(struct node *p) { int ld,rd; if(!p) return 0; else { ld=deep(p->l); rd=deep(p->r); if(ld>rd) return ld+1; else return rd+1; } } int main() { struct node *head; int n,m; head=creat(head); intravel(head); printf("\n"); lasttravel(head); printf("\n"); m=leaves(head); printf("%d\n",m); n=deep(head); printf("%d\n",n); return 0; }
相关文章推荐
- 数据结构实验之求二叉树后序遍历和层次遍历
- HDU 4008 Parent and son (数据结构)
- 数据结构与算法1
- UVA - 12532 Interval Product
- 数据结构之链表、栈和队列 java代码实现
- 数据结构之链表、栈和队列 java代码实现
- 从头开始学习算法和数据结构
- 数据结构:散列
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 数据结构——二叉树的遍历
- 树-堆结构练习——合并果子之哈夫曼树
- 数据结构与算法分析 java语言描述 课后题1.6
- 数据结构与算法分析 java语言描述
- .frm文件恢复mysql的数据结构
- 数据结构之栈和队列---Ackerman函数
- 数据结构之栈和队列---队列的基本操作
- 数据结构之栈和队列---栈的基本操作
- COJ970 WZJ的数据结构(负三十)
- COJ968 WZJ的数据结构(负三十二)
- 查找算法 数据结构