问题 H: 数据结构(C语言版)算法6.1至算法6.4__二叉树遍历
来源:互联网 发布:单片机编程用什么语言 编辑:程序博客网 时间:2024/05/16 10:14
问题 H: 数据结构(C语言版)算法6.1至算法6.4__二叉树遍历
时间限制: 1 Sec 内存限制: 128 MB
提交: 128 解决: 34
[提交][状态][讨论版]
题目描述
求二叉树的先序、中序及后序遍历序列。结点数<=100。
输入
按先序遍历的顺序建立一个二叉树,为了保证树的唯一性,并在程序中的递归出口是左右子树为空,故输入时,当某结点的左子树或右子树为空值时也要作为先序遍历的有效输入。例如一个树只有3个结点,根结点值为1,其左孩子结点值为2,其右孩子结点值为3,则输入的先序遍历序列依次为1 2 0 0 3 0 0(为空时输入0值)*/
输出
在三行上,依次输出二叉树的先序、中序及后序遍历序列。序列中各数用空格隔开。
样例输入
1 2 0 0 3 0 0
样例输出
1 2 3
2 1 3
2 3 1
提示
一开始狂RE 不知道是不是人品问题 下面是参考了老师给的代码 后 做过的 AC 了
主要 难住我的地方是一开始 不知道如何结束输入 后来知道了就 一组数据 但是仍然不知道如何结束这一组数据的输入
我直接gets 所有的再处理 也不行 用scanf !=EOF 也是RE RE代码见最后面
这个思路很简单 一直建立树接点 如过遇到0 则不建立相应的接点 直接递归建立即可 很简单
时间限制: 1 Sec 内存限制: 128 MB
提交: 128 解决: 34
[提交][状态][讨论版]
题目描述
求二叉树的先序、中序及后序遍历序列。结点数<=100。
输入
按先序遍历的顺序建立一个二叉树,为了保证树的唯一性,并在程序中的递归出口是左右子树为空,故输入时,当某结点的左子树或右子树为空值时也要作为先序遍历的有效输入。例如一个树只有3个结点,根结点值为1,其左孩子结点值为2,其右孩子结点值为3,则输入的先序遍历序列依次为1 2 0 0 3 0 0(为空时输入0值)*/
输出
在三行上,依次输出二叉树的先序、中序及后序遍历序列。序列中各数用空格隔开。
样例输入
1 2 0 0 3 0 0
样例输出
1 2 3
2 1 3
2 3 1
提示
一开始狂RE 不知道是不是人品问题 下面是参考了老师给的代码 后 做过的 AC 了
主要 难住我的地方是一开始 不知道如何结束输入 后来知道了就 一组数据 但是仍然不知道如何结束这一组数据的输入
我直接gets 所有的再处理 也不行 用scanf !=EOF 也是RE RE代码见最后面
这个思路很简单 一直建立树接点 如过遇到0 则不建立相应的接点 直接递归建立即可 很简单
#include<stdio.h>#include<malloc.h>typedef struct haha{ int num; struct haha *left; struct haha *right;}nd;int a[1000],k;nd* creat(nd *root){ int x; scanf("%d",&x); if(x==0) return NULL; root=(nd *)malloc(sizeof(nd)); root->num=x; root->left=creat(root->left); root->right=creat(root->right); return root;}void pre_print(nd *root){ a[k++]=root->num; if(root->left!=NULL) pre_print(root->left); if(root->right!=NULL) pre_print(root->right);}void mid_print(nd *root){ if(root->left!=NULL) mid_print(root->left); a[k++]=root->num; if(root->right!=NULL) mid_print(root->right);}void las_print(nd *root){ if(root->left!=NULL) las_print(root->left); if(root->right!=NULL) las_print(root->right); a[k++]=root->num;}int main(){ nd *tree; int i; tree=NULL; tree=creat(tree); k=0; pre_print(tree); for(i=0;i<k-1;i++) printf("%d ",a[i]); printf("%d\n",a[k-1]); k=0; mid_print(tree); for(i=0;i<k-1;i++) printf("%d ",a[i]); printf("%d\n",a[k-1]); k=0; las_print(tree); for(i=0;i<k-1;i++) printf("%d ",a[i]); printf("%d\n",a[k-1]); return 0;}
RE版本
#include<stdio.h>#include<string.h>#include<malloc.h>typedef struct haha{ struct haha *l_child; struct haha *r_child; int num;}node;int a[100000];int ans[100000];int n,k;node * make_tree(node *temp){// node *temp;wentichuxianzai zheli// temp=root;caocaocaocao //printf("n=%d\n",n); if(temp==NULL) { if(a[n]!=0) { temp=(node *)malloc(sizeof(node)); temp->l_child=temp->r_child=NULL; temp->num=a[n]; } else return NULL; } ++n; temp->l_child=make_tree(temp->l_child); ++n; temp->r_child=make_tree(temp->r_child); return temp;}void print_pre(node *temp){ ans[k++]=temp->num; if(temp->l_child!=NULL) print_pre(temp->l_child); if(temp->r_child!=NULL) print_pre(temp->r_child);}void print_mid(node *temp){ if(temp->l_child!=NULL) print_pre(temp->l_child); ans[k++]=temp->num; if(temp->r_child!=NULL) print_pre(temp->r_child);}void print_las(node *temp){ if(temp->l_child!=NULL) print_pre(temp->l_child); if(temp->r_child!=NULL) print_pre(temp->r_child); ans[k++]=temp->num;}int main(){ int i,j,d; char s[400000]; node *root; while(gets(s)) { d=strlen(s); j=0; for(i=0;i<d;i++) if('0'<=s[i]&&s[i]<='9') a[j++]=s[i]-'0'; root=NULL; n=0; root=make_tree(root); k=0; print_pre(root); for(i=0;i<k-1;i++) printf("%d ",ans[i]); printf("%d\n",ans[k-1]); k=0; print_mid(root); for(i=0;i<k-1;i++) printf("%d ",ans[i]); printf("%d\n",ans[k-1]); k=0; print_las(root); for(i=0;i<k-1;i++) printf("%d ",ans[i]); printf("%d\n",ans[k-1]); } return 0;}
- 问题 H: 数据结构(C语言版)算法6.1至算法6.4__二叉树遍历
- 数据结构与算法(C语言版)__二叉树
- 数据结构与算法(C语言版)__二叉查找树
- 数据结构与算法(C语言版)__树
- 数据结构与算法(C语言版)__交换
- 数据结构与算法(C语言版)__冒泡排序
- 数据结构与算法(C语言版)__选择排序
- 数据结构与算法(C语言版)__顺序查找
- 数据结构与算法(C语言版)__二分查找
- 数据结构与算法(C语言版)__递归
- 数据结构与算法(C语言版)__排列组合
- 数据结构与算法(C语言版)__插入排序
- 数据结构与算法(C语言版)__快速排序
- 数据结构与算法(C语言版)__归并排序
- 数据结构与算法(C语言版)__栈
- 数据结构与算法(C语言版)__队列
- 数据结构与算法(C语言版)__链表
- 数据结构与算法(C语言版)__链表2
- .sscanf真的很好用
- 【项目经验】上传excel 之拼SQL语句
- winform 中 给DataGridView的表头添加CheckBox
- 计算星期几
- Displaying Bitmaps Efficiently(2)-Processing Bitmaps Off the UI Thread
- 问题 H: 数据结构(C语言版)算法6.1至算法6.4__二叉树遍历
- 【项目经验】Map类型得new实例化再用 不能作为全局变量后就不new 不然报空指针
- UE使用技巧
- 数据库变化监听方法
- 如何选择VC界面库产品?(二)– DSkinLite界面库介绍
- vs2008配置boost库
- .sprintf 用法
- bat批处理文件中常用命令释疑
- 遇见C++ Lambda