题解 | 二叉树遍历

二叉树遍历

https://www.nowcoder.com/practice/6e732a9632bc4d12b442469aed7fe9ce

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

typedef struct Node {
    char root;
    Node* rchild, *lchild;
} Node;

Node* recover(string preOrderString, string midOrderString) {
    char c = preOrderString.at(0);
    // 建立新节点
    Node* cur = new Node;
    cur->root = c;
    cur->lchild = NULL;
    cur->rchild = NULL;
    int pos = midOrderString.find(c);
    // 结束条件
    if (preOrderString.size() == 0) {
        return cur;
    }
    if (pos != 0) {
        string preTemp = preOrderString.substr(1, pos);
        string midTemp = midOrderString.substr(0, pos);
        cur->lchild = recover(preTemp, midTemp);
    }
    if (pos + 1 != preOrderString.size()) {
        string preTemp = preOrderString.substr(pos+1);
        string midTemp = midOrderString.substr(pos+1);
        cur->rchild = recover(preTemp, midTemp);
    }
    return cur;
}

void postOrder(Node* node){
    if(node->lchild != NULL)
        postOrder(node->lchild);
    if(node->rchild != NULL)
        postOrder(node->rchild);
    cout << node->root;
}

int main() {
    string preOrderString;
    string midOrderString;
    while (cin >> preOrderString >> midOrderString) {
        // 重建二叉树
        Node* node = new Node;
        node = recover(preOrderString, midOrderString);
        // 后序遍历
        postOrder(node);
        cout << endl;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
10-13 13:49
南京大学 财务
饿魔:笑死我了,你简直是个天才
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务