Ural 1136. Parliament
2010-11-04 19:37
323 查看
应该算是一道数据结构题吧,但是放到了ural的图论专区了,给出一棵二叉搜索树按左、右、中的顺序输出的序列,求按右、左、中顺序输出的序列。解法是对于二叉搜索树后序输出的序列,将序列从后到前的顺序加入二叉搜索树,就可以还原出树来(同样对于先序的序列,可以从前到后加入),建好树后,再按右、左、中顺序输出,就可以了。当然,也可以不建树,直接递归模拟出来。
#include <cstdio> using namespace std; int dat[3002]; bool flag; struct Node { int data; Node *LeftChild,*RightChild; Node(int e) { data=e; LeftChild=RightChild=0; } }; struct BinaryTree { Node *root; BinaryTree() { root=0; } void Insert(int x) { Node *p=root; Node *pp=0; while(p) { pp=p; if(x<p->data) p=p->LeftChild; else p=p->RightChild; } Node *r=new Node(x); if(root) { if(x<pp->data) pp->LeftChild=r; else pp->RightChild=r; } else root=r; } void PostOrder(Node *u) { if(u) { PostOrder(u->RightChild); PostOrder(u->LeftChild); if(!flag) { printf("%d",u->data); flag=true; } else printf(" %d",u->data); } } }; int main(void) { int n; while(scanf("%d",&n)!=EOF) { BinaryTree b; for(int i=0;i<n;++i) scanf("%d",&dat[i]); for(int i=n-1;i>=0;--i) b.Insert(dat[i]); flag=false; b.PostOrder(b.root); } return 0; }
相关文章推荐
- URAL 1136 Parliament
- Ural1136-Parliament
- ural(Timus) 1136. Parliament
- URAL 1136 Parliament (DFS)
- URAL 1136 Parliament 二叉树水题 BST后序遍历建树
- URAL 1136 Parliament (DFS)
- ural 1136. Parliament -搜索二叉树
- URAL 1136 Parliament 二叉树水题 BST后序遍历建树
- URAL 1136 Parliament 二叉树水题 BST后序遍历建树
- ural 1136. Parliament
- URAL 1136 Parliament [DFS树型转换]
- Ural 1136 Parliament / 后序遍历二叉树
- timus 1136 Parliament(e)
- timus 1136 Parliament(二叉树)
- ural Parliament 二叉排序树前/...序遍历的转换
- 1136. Parliament
- ural 1667 Square Country 3,构造
- ural 1748 The Most Complex Number 和 丑数
- ural 1007 Code Words
- ZOJ 1136