题137.pta数据结构题集-03-树3 Tree Traversals Again (25 分)
一、题目
二、题解
依题意知道push之前若没有pop操作,则建立上一个push到栈里的节点的左子树,反之则建立pop出来的节点的右子树
#include <bits/stdc++.h>
using namespace std;
int flag=0;
typedef struct Tnode *Position;
typedef Position BinT;
struct Tnode
{
int data;
BinT left;
BinT right;
};
BinT createTree(int N)
{
int count0=0;
BinT T=NULL;
string op;
stack<Position> s;
BinT popnode=NULL;
cin>>op;
while(1)
{
if(op=="Push")
{
int data;
cin>>data;
Position tnode=(Position)malloc(sizeof(struct Tnode));
tnode->data=data;
tnode->left=NULL;
tnode->right=NULL;
if(T==NULL)
{
T=tnode;
}
if(popnode!=NULL)
{
popnode->right=tnode;
popnode=NULL;
}
else if(!s.empty())
{
s.top()->left=tnode;
}
s.push(tnode);
}
else
{
popnode=s.top();
s.pop();
count0++;
if(count0==N)
{
break;
}
}
cin>>op;
}
return T;
}
void PostOrderTraversal(BinT BT)
{
BinT T=BT;
if(T==NULL)
{
return;
}
PostOrderTraversal(T->left);
PostOrderTraversal(T->right);
if(flag)
{
putchar(' ');
}
else
{
flag=1;
}
printf("%d",T->data);
}
int main()
{
int N;
cin>>N;
BinT T=createTree(N);
PostOrderTraversal(T);
}
|