输出
按从上到下从左到右的顺序输出二叉树的叶子结点。
示例输入
abd,,eg,,,cf,,,
xnl,,i,,u,,
示例输出
dfg uli 就是一个二叉树的层次遍历.但WA4次因为直接输出的leave数组,要用for(;i<ans;)控制一下.#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <queue> #include <cmath> #define inf 0x3f3f3f3f; #define ls l,mid,rt<<1 #define rs mid+1,r,rt<<1|1 #define maxn 50000 using namespace std; char s[maxn]; int tmp,ans; struct node { char c; node *l,*r; }; char p,leave[maxn]; queue<node *>Q; node *bu(node *rt) { rt=new node; p=s[tmp++]; if(p==',') rt=NULL; else { rt->c=p; rt->l=bu(rt->l); rt->r=bu(rt->r); } return rt; } void look(node *rt) { if(rt!=NULL) Q.push(rt); while(!Q.empty()) { node *a; a=Q.front(); Q.pop(); if( (!a->l)&&(!a->r)) leave[ans++]=a->c; if(a->l) Q.push(a->l); if(a->r) Q.push(a->r); } } int main() { int n,m,i,j,k; while(~scanf("%s",s)) { while(!Q.empty()) Q.pop(); ans=0;tmp=0; node *rt; rt=new node; rt=bu(rt); look(rt); for(i=0;i<ans;i++) printf("%c",leave[i]); printf("\n"); } return 0; }
本文介绍了一种通过层次遍历的方式获取并输出二叉树所有叶子节点的方法。利用队列实现广度优先搜索,确保了节点的输出顺序符合题目要求。文章提供了完整的C++实现代码。
1万+

被折叠的 条评论
为什么被折叠?



