二叉树遍历 已知中序后序遍历求前序遍历

已知中序、后序遍历求前序遍历的方法和已知前序、中序遍历求后序遍历的方法类似寻找根节点,

然后把中序遍历分成左右两个子树,有如此不断递归。很多文章介绍,不再累述。

复制代码
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
const int MAXN = 100;
struct Node {
    char value;
    Node *left_child;
    Node *right_child;
    Node () {
        left_child = right_child = NULL;
    }
};
bool first = true;
void Pre_order(Node *tree) {
    if(first) {
        cout << tree->value;
        first = false;
    } else cout << " " << tree->value;

    if(tree->left_child != NULL) {
        Pre_order(tree->left_child);
    }
    if(tree->right_child != NULL) {
        Pre_order(tree->right_child);
    }
}
Node* build(char pos[], char in[], int n) {
    if(n == 0) return NULL;
    Node *tmp = new Node;
    for(int i = 0; i < n; i++) {
        if(in[i] == pos[n-1]) {
            tmp->value = pos[n-1];
            tmp->left_child = build(pos, in, i);
            tmp->right_child = build(pos+i, in+i+1, n-i-1);
            return tmp;
        }
    }
    return NULL;
}

int main() {
    int n;
    char posorder[MAXN], inorder[MAXN];
    scanf("%d", &n);
    first = false;
    scanf("%s", inorder);
    scanf("%s", posorder);
    Node *tree = build(posorder, inorder, n);
    Pre_order(tree);
    return 0;
}
复制代码

 

posted on   disppr  阅读(751)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
阅读排行:
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 个人数据保全计划:从印象笔记迁移到joplin
· Vue3.5常用特性整理
· 重拾 SSH:从基础到安全加固
· 为什么UNIX使用init进程启动其他进程?
< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示