由二叉树的前序遍历和中序遍历,求其后序遍历
#include <iostream> #include <string> using namespace std; struct TreeNode { char data; TreeNode* leftChild; TreeNode* rightChild; TreeNode (char c) : data(c), leftChild(NULL), rightChild(NULL) {} }; TreeNode* Build (string str1, string str2) { if (str1.size() == 0) { // 返回空树 return NULL; } char c = str1[0]; // 当前字符 TreeNode* root = new TreeNode(c); // 创建新节点 int position = str2.find(c); // 寻找切分点 root->leftChild = Build(str1.substr(1, position), str2.substr(0, position)); root->rightChild = Build(str1.substr(position + 1), str2.substr(position + 1)); return root; } void PostOrder (TreeNode* root) // 后序遍历 { if (root == NULL) { return; } PostOrder(root->leftChild); PostOrder(root->rightChild); cout << root->data; return; } int main () { string str1, str2; while (cin >> str1 >> str2) { TreeNode* root = Build(str1, str2); PostOrder(root); cout << endl; } return 0; }