P1305 新二叉树 巧解

来源:互联网 发布:退款淘宝介入处理过程 编辑:程序博客网 时间:2024/06/16 07:06


题目描述

输入一串二叉树,用遍历前序打出。

输入输出格式

输入格式:

第一行为二叉树的节点数n。

后面n行,每一个字母为节点,后两个字母分别为其左右儿子。

空节点用*表示

输出格式:

前序排列的二叉树

输入输出样例

输入样例#1:
6abcbdicj*d**i**j**
输出样例#1:
abdicj



#include<iostream>#include<string.h>using namespace std;struct node{char l,r,fa;}tree[1000];void work(char s){cout<<s;if(tree[s].l!='*') work(tree[s].l);if(tree[s].r!='*') work(tree[s].r);}int main(){int i,n;char c,fir;cin>>n;for(int i=1;i<=n;i++){cin>>c;if(i==1) fir=c;cin>>tree[c].l>>tree[c].r;//tree[tree[c].l].fa=tree[tree[c].r].fa=c;}work(fir);return 0;}/*#include<stdio.h>#include<string.h>struct node{         //定义node类型    char lc,rc,fa;   //分别有它的左儿子,右儿子和父亲};node tree[1000];void work(char s){                              //简单的递归    printf("%c", s);    if (tree[s].lc!='*') work(tree[s].lc);    if (tree[s].rc!='*') work(tree[s].rc);}int main(){    int i,n;    char c,fir;    scanf("%d", &n);    for (i=1;i<=n;i++){    //在这里我本来要用while循环,但是这样的话就保留不了树根的位置,所以用了for        scanf(" %c", &c);        if (i==1) fir = c;        scanf(" %c%c", &tree[c].lc,&tree[c].rc);        tree[tree[c].lc].fa = tree[tree[c].rc].fa = c;    }    work (fir);    return 0;*/

原创粉丝点击