题解 | 二叉树遍历

二叉树遍历

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

#include <iostream>
#include <string>
using namespace std;
struct TreeNode{
    char data;
    TreeNode* left;
    TreeNode* right;
    TreeNode(char c):data(c),left(nullptr),right(nullptr){};
};

//前序遍历和中序遍历构建二叉树
TreeNode* buildTree(string preorder,string inorder){
    if(preorder==""||inorder=="") return nullptr;
    char c = preorder[0];
    TreeNode *node=new TreeNode(c);
    int pos = inorder.find(c);
    node->left = buildTree(preorder.substr(1,pos), inorder.substr(0,pos));
    node->right = buildTree(preorder.substr(1+pos),inorder.substr(pos+1));
    return node;
}

void PrintPostOrder(TreeNode* tree){
    if(tree==nullptr) return;
    char c = tree->data;
    PrintPostOrder(tree->left);
    PrintPostOrder(tree->right);
    cout<<c;
}

int main() {
    string a,b;
    while(cin>>a>>b){
        TreeNode* tree = buildTree(a, b);
        PrintPostOrder(tree);
        cout<<endl;
    }
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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