由二叉树的前序遍历和中序遍历,求其后序遍历

#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;
}

 

posted @ 2020-03-26 10:44  MK_筱雨  阅读(243)  评论(0编辑  收藏  举报