1086. Tree Traversals Again (25)[递归+二叉树]
2017-02-19 11:13
381 查看
1. 原题: https://www.patest.cn/contests/pat-a-practise/1086
2. 思路:
递归+二叉树的遍历问题题意:
用栈模拟树的遍历,输出后序
思路:
入栈序列其实是二叉树的前序,出栈序列是中序。
所以,问题就是利用前序和中序输出后序。
显然,用递归处理啦。
已AC
3. 源码:
#include<iostream> #include<vector> #include<stack> #include<string> using namespace std; int N;//结点数 vector<int> ino, pre;//分别存储中序和前序的序列 int findPos(int x);//找出前序中的第x个元素在中序的位置 void post(int left, int right, int ro_pos);//输出后序, 参数分别是中序的左、右边界,前序的根位置 int main(void) { //freopen("in.txt", "r", stdin); cin >> N; stack<int> sta;//栈 for (int i = 0; i < 2 * N; i++)//读入数据 { string s; int data; cin >> s; if (s[1] == 'u')//构建前序序列 { cin >> data; sta.push(data); pre.push_back(data); } else//构建中序序列 { data = sta.top(); sta.pop(); ino.push_back(data); } } post(0, N - 1, 0);//递归输出后序 return 0; } int findPos(int x)//找出前序中的第x个元素在中序的位置 { int i; for (i = 0; i < N; i++) { if (ino[i] == pre[x]) break; } return i; } void post(int left, int right, int ro_pos)//参数分别是中序的左、右边界,前序的根位置 { if (left > right)//递归终止条件 return; int ino_pos = findPos(ro_pos); post(left, ino_pos - 1, ro_pos + 1);//递归左子树 post(ino_pos + 1, right, (ro_pos + ino_pos - left + 1));//递归右子树 if (ro_pos == 0)//输出根结点 cout << pre[ro_pos] << endl; else cout << pre[ro_pos] << ' '; }
相关文章推荐
- PAT (Advanced Level) Practise 1086 Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)解题报告
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- PAT (Advanced Level) Practise 1086 Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)【二叉树】——PAT (Advanced Level) Practise
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)
- 1086. Tree Traversals Again (25)-PAT甲级真题
- 1086. Tree Traversals Again (25) PAT甲级刷题
- 1086. Tree Traversals Again (25)