关于以三元组(F,C,L/R)的形式输入一棵二叉树的诸边,输出二叉树的广义表形式的问题
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
struct BiTree
{
char data;
BiTree* lchild;
BiTree* rchild;
};
BiTree* T = NULL;
void PostOrderTraverse(BiTree *T)
{
if (T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout << T->data<<' ';
}
}
void print(BiTree *T)
{
if (T == NULL) { return;}
cout << T->data;
if (T->lchild) { cout << "("; print(T->lchild); }
if (!T->lchild && T->rchild) { cout << "("; }
if (T->rchild){ cout << ","; print(T->rchild); cout << ")"; }
if (!T->rchild && T->lchild) { cout << ")"; }
return;
}
int main()
{
char a, b, c;
BiTree* node, * p;
queue<BiTree*>q;
cin >> a >> b >> c;
if (a == '^' && b != '^')
{
node = new BiTree;
node->data = b;
node->lchild = node->rchild = NULL;
T = node;
q.push(T);
}
cin >> a >> b >> c;
while (!q.empty() && a != '^' && b != '^')
{
p = q.front();
q.pop();
while (a == p->data)
{
node = new BiTree;
node->data = b;
node->lchild = node->rchild = NULL;
if (c == 'L')
{
p->lchild = node;
}
else
{
p->rchild = node;
}
q.push(node);
cin >> a >> b >> c;
}
}
print(T);
return 0;
}