数据结构实验之二叉树七:叶子问题
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。
输入
输入数据有多行,每一行是一个长度小于
50
个字符的字符串。
输出
按从上到下从左到右的顺序输出二叉树的叶子结点。
示例输入
abd,,eg,,,cf,,, xnl,,i,,u,,
示例输出
dfg uli
注意 其实就是层次遍历的拓展,输出条件不同而已
#include <iostream> #include <algorithm> #include<queue> using namespace std; typedef struct node { char data; struct node *lchild,*rchild; } node,*tree; char c[60]; int i; int xiancreat(tree &t); void leave(tree t);//注意由题意需层次遍历 int main() { tree t; while(cin>>c) { i=0; xiancreat(t); leave(t); cout<<endl; } } int xiancreat(tree &t) { char a; a=c[i++]; if(a==',') t=NULL; else { t=(tree)malloc(sizeof(node)); if(!t) exit(0); t->data=a; xiancreat(t->lchild); xiancreat(t->rchild); } return 0; } void leave(tree t) { tree p=t; queue<tree>st; if(p) st.push(p); while(!st.empty()) { p=st.front(); if(p->lchild==NULL&&p->rchild==NULL) { cout<<p->data; } st.pop(); if(p->lchild!=NULL) st.push(p->lchild); if(p->rchild!=NULL) st.push(p->rchild); } }