您的位置:首页 > 其它

【hihoCoder】1049.后序遍历

2016-04-14 19:57 441 查看
问题:http://hihocoder.com/problemset/problem/1049?sid=767510

已知一棵二叉树的前序遍历及中序遍历结果,求后序遍历结果

思路:

前序:根-左子树-右子树

中序:左子树-根-右子树

后序:左子树-右子树-根

递归的方法,从前序得到根结点,然后根据中序发现两个子树。先求子树的后序遍历结果,再把当前的根添加在最后即可。

#include <iostream>
#include <string>
using namespace std;

void toPostOrder(string preOrder, string inOrder, string& postOrder, int len){
if (len <= 0)
return;
int i = 0;
for (; i < len; i++)
if (preOrder[0] == inOrder[i])
break;

toPostOrder(preOrder.substr(1), inOrder, postOrder, i);
toPostOrder(preOrder.substr(i + 1), inOrder.substr(i + 1), postOrder, len - i - 1);
postOrder.push_back(preOrder[0]);
}

int main(){
string preOrder, inOrder;
cin >> preOrder >> inOrder;
string postOrder;
toPostOrder(preOrder, inOrder, postOrder, preOrder.length());
cout<<postOrder<<endl;
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: