您的位置:首页 > 理论基础 > 数据结构算法

【2136】数据结构实验之二叉树的建立与遍历 SDUTOJ

2014-08-21 21:03 239 查看


数据结构实验之二叉树的建立与遍历

Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^

题目描述

已知一个按先序序列输入的字符序列,如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>int a=0,b=0;struct node{char str;struct node *left,*right;}*p;struct node *creat(struct node *p)//先序建立二叉树{char ch;scanf("%c",&ch);if(ch==',')p=NULL;else{p=(struct node *)malloc(sizeof(struct node));
        p->str=ch;p->left=creat(p->left);p->right=creat(p->right);}return p;};void zhongxu(struct node *p)//中序遍历序列输出{if(p!=NULL){zhongxu(p->left);printf("%c",p->str);zhongxu(p->right);}}void houxu(struct node *p)//后续遍历序列输出{if(p!=NULL){houxu(p->left);houxu(p->right);printf("%c",p->str);}}int yezi(struct node *p)//求叶子个数的函数{if(p!=NULL){if(p->left==NULL&&p->right==NULL)a++;yezi(p->left);yezi(p->right);}return a;}int deep(struct node *p)//求二叉树深度的函数{int l,r;if(!p)return 0;l=deep(p->left);r=deep(p->right);return l>r?l+1:r+1;}int main(){int n;struct node *root;root=creat(p);zhongxu(root);printf("\n");houxu(root);printf("\n");printf("%d\n",yezi(root));printf("%d\n",deep(root));return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: