题目描述
给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构。
编写程序输出该树的所有叶子结点和它们的父亲结点
输入
第一行输入一个整数t,表示有t个二叉树
第二行起,按照题目表示的输入方法,输入每个二叉树的先序遍历,连续输入t行
输出
第一行按先序遍历,输出第1个示例的叶子节点
第二行输出第1个示例中与叶子相对应的父亲节点
以此类推输出其它示例的结果
样例输入
3
AB0C00D00
AB00C00
ABCD0000EF000
样例输出
C D
B A
B C
A A
D F
C E
通过oj系统测试:
(如果有无法通过的示例欢迎评论)
#include<iostream>
#include<stack>
#include<queue>
using namespace std;
int main()
{
int t;
cin >> t;
char ch='0';
while (t--)
{
stack<char> st;
char in[4] = { '1','1','1','1' };
queue<char> qu2;
int n = 0;
if (cin.peek() == '\n') {
cin.get();
}
while (cin.peek() != '\n')
{
cin >> ch;
if (ch != '0')
{
st.push(ch);
}
if (n < 4)
{
in[n] = ch;
}
else
{
in[0] = in[1];
in[1] = in[2];
in[2] = in[3];
in[3] = ch;
}
n++;
if (in[2] == '0' && in[3] == '0' && in[1] != in[2])
{
cout << st.top() << " ";
st.pop();
qu2.push(st.top());
if (in[0] == '0')
{
st.pop();
}
}
}
cout << endl;
while (!qu2.empty())
{
cout << qu2.front() << " ";
qu2.pop();
}
cout << endl;
}
}