SDUT-数据结构实验之二叉树二:遍历二叉树
2017-05-29 22:21
435 查看
数据结构实验之二叉树二:遍历二叉树
Time Limit: 1000MS Memory Limit: 65536KBProblem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。Output
每组输入数据对应输出2行:第1行输出中序遍历序列;
第2行输出后序遍历序列。
Example Input
abc,,de,g,,f,,,
Example Output
cbegdfa
cgefdba
Hint
Author
//两种二叉树创建模式(为什么一定要使用二级指针:http://blog.chinaunix.net/uid-26983585-id-3219788.html) //1.于main函数中定义一个tree指针,注意这是个二叉树节点的指针类型;然后将这个参数传递给一个Creat函数,在该函数中递归创建二叉树 #include <bits/stdc++.h> typedef struct node { char data; struct node*left; struct node*right; }tree; int flag; char str[55]; tree*creat(tree*rt) { if(str[flag]==',')///不需要判断flag下标是否还在str的长度范围内(?) { flag++; return NULL; } else { rt=(tree*)malloc(sizeof(tree)); rt->data=str[flag++]; rt->left=creat(rt->left); rt->right=creat(rt->right); } return rt; } void mid(tree*rt) { if(rt) { mid(rt->left); printf("%c",rt->data); mid(rt->right); } } void last(tree*rt) { if(rt) { last(rt->left);last(rt->right); printf("%c",rt->data); } } int main() { tree*rt; while(scanf("%s", str)!=EOF) { flag=0; rt=creat(rt); mid(rt); printf("\n"); last(rt); printf("\n"); } return 0; } //2.可以直接在Creat函数中创建二叉树,并返回二叉树的根指针;如:rt=Creat(); #include <bits/stdc++.h> typedef struct node { char data; struct node*left; struct node*right; }tree; int flag; char str[55]; tree*rt; tree*creat() { tree*rt=NULL; if(str[flag]==',') { flag++; return NULL; } else { rt=(tree*)malloc(sizeof(tree)); rt->data=str[flag++]; rt->left=creat(); rt->right=creat(); } return rt; } void mid(tree*rt) { if(rt) { mid(rt->left); printf("%c",rt->data); mid(rt->right); } } void last(tree*rt) { if(rt) { last(rt->left);last(rt->right); printf("%c",rt->data); } } int main() { while(scanf("%s", str)!=EOF) { flag=0; rt=creat(); mid(rt); printf("\n"); last(rt); printf("\n"); } return 0; }
///推荐使用(同1)
#include <bits/stdc++.h> using namespace std; char s[100]; typedef struct node///自定义tree类型 { node*left,*right; char data; } tree; int k;///标记字符串下标 tree*creat(char*s) { tree*root; if(s[k]==',') { k++; return NULL;///s[k]==','时要返回NULL } else { root=(tree*)malloc(sizeof(tree)); root->data=s[k++]; root->left=creat(s); root->right=creat(s); } return root; } void mid(tree*root) { if(root)///必须有root不为空的前提 { mid(root->left); printf("%c",root->data); mid(root->right); } } void last(tree*root) { if(root) { last(root->left); last(root->right); printf("%c",root->data); } } int main() { while(scanf("%s",s)!=EOF) { k=0; tree*root=NULL; root=creat(s); mid(root); printf("\n"); last(root); printf("\n"); } return 0; }
相关文章推荐
- [SDUT](3341)数据结构实验之二叉树二:遍历二叉树 ---- 二叉树
- SDUT 3341 数据结构实验之二叉树二:遍历二叉树
- 数据结构实验之二叉树二:遍历二叉树
- 数据结构实验之二叉树二:遍历二叉树
- SDUT 2136 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树二:遍历二叉树
- 数据结构实验之二叉树二:遍历二叉树
- 3341 数据结构实验之二叉树二:遍历二叉树
- SDUT-2804 数据结构实验之二叉树八:(中序后序)求二叉树的深度
- 数据结构实验之二叉树二:遍历二叉树
- 数据结构实验之二叉树二:遍历二叉树
- C语言 数据结构之二叉树 数据结构实验之二叉树五:层序遍历
- SDUT 3344 数据结构实验之二叉树五:层序遍历
- 数据结构实验之二叉树二:遍历二叉树
- SDUT-3343 数据结构实验之二叉树四:(先序中序)还原二叉树
- 数据结构实验之二叉树二:遍历二叉树 oj
- sdutacm-数据结构实验之二叉树二:遍历二叉树
- 数据结构实验之二叉树二:遍历二叉树
- 暑假集训 8.8-2 sdut3344 数据结构实验之二叉树五:层序遍历
- 暑假集训 8.8 sdut2136 数据结构实验之二叉树的建立与遍历