标签:1086 int tree Traversals Tree fa type root postorder
参考\(\color{green}{yls}\)代码,虽然自己思路大体上相同,但离代码实现还差一步,菜的安详>_<。
思路
题意其实就是下面的伪代码:
void inorder(int root)
{
if(root == 0) return;
push(root);
inorder(tree[root].lchild);
pop();
inorder(tree[root].rchild);
}
现在给定你出栈入栈的序列(类似DFS序),还原出树,其实就是根据给定的序列反向模拟了。
代码
type=0表示下一个待插入的为左孩子结点,type=1表示下一个待插入的为右孩子结点。
const int N=35;
PII tree[N];
vector<int> post;
int n;
void postorder(int root)
{
if(root == 0) return;
postorder(tree[root].fi);
postorder(tree[root].se);
post.pb(root);
}
int main()
{
cin>>n;
int root;
int fa=0;
int type=0;
stack<int> stk;
for(int i=0;i<n*2;i++)
{
string s;
cin>>s;
if(s == "Push")
{
int x;
cin>>x;
stk.push(x);
if(fa == 0) root=x;
else
{
if(type == 0) tree[fa].fi=x;
else tree[fa].se=x;
}
type=0;
fa=x;
}
else
{
fa=stk.top();
stk.pop();
type=1;
}
}
postorder(root);
for(int i=0;i<post.size();i++)
if(i) cout<<' '<<post[i];
else cout<<post[i];
cout<<endl;
//system("pause");
return 0;
}
标签:1086,int,tree,Traversals,Tree,fa,type,root,postorder
来源: https://www.cnblogs.com/fxh0707/p/14448959.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。