Problem Description
已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
Input
输入数据有多行,每一行是一个长度小于
50
个字符的字符串。
Output
按从上到下从左到右的顺序输出二叉树的叶子结点。
Example Input
abd,,eg,,,cf,,, xnl,,i,,u,,
Example Output
dfg uli
层序输出叶子#include<stdio.h> #include<string.h> #include<stdlib.h> #define ERROR -1 #define OK 1 typedef char TElemtype; typedef int Statu; typedef struct BiTnode { TElemtype data; struct BiTnode *lchild, *rchild; }BiTnode, *BiTree; TElemtype str[55]; int i; Statu CreateBiTree(BiTree &T); Statu Ceng(BiTree T); int main() { BiTree T; while(~scanf("%s", str)) { i = 0; CreateBiTree(T); Ceng(T); printf("\n"); } return 0; } Statu CreateBiTree(BiTree &T) { if(str[i++] == ',') T = NULL; else { T = (BiTree)malloc(sizeof(BiTnode)); if(!T) exit(ERROR); T -> data = str[i - 1]; CreateBiTree(T -> lchild); CreateBiTree(T -> rchild); } return OK; } Statu Ceng(BiTree T) { if(T == NULL) return OK; int i = 0; int n = 0; BiTree a[10010]; a[n++] = T; while(i < n) { if(a[i]) { if(!a[i] -> lchild && !a[i] -> rchild) printf("%c", a[i] -> data); if(a[i] -> lchild) a[n++] = a[i] -> lchild; if(a[i] -> rchild) a[n++] = a[i] -> rchild; } i++; } return OK; }