美文网首页leetcode aceveryday
根据二叉树先序和中序遍历得出后序遍历

根据二叉树先序和中序遍历得出后序遍历

作者: atok | 来源:发表于2019-01-06 14:59 被阅读0次

思路:

pre:前序遍历序列;in:中序遍历序列每次取先序序列的首字符即为当前子树的根结点,在中序序列中找到该字符的对应位置index
在先序序列中该结点的左子树包含结点的下标对应是1~index,右子树包含结点的下标对应是index+1~字符串尾
在中序序列中该结点的左子树包含结点的下标对应是0~index-1,右子树包含结点的下标对应是index+1~字符串尾
递归下去

代码

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

struct node {
    node *left, *right;
    char val;
};

node *createTree(string pre, string in)
{
    node *t = nullptr;
    if(pre.length() > 0) {
        t = new node;
        t -> val = pre[0];
        int index = in.find(pre[0]);
        t -> left = createTree(pre.substr(1, index), in.substr(0, index));
        t -> right = createTree(pre.substr(index + 1), in.substr(index + 1));
    }
    return t;
}

void post_order(node *root)
{
    if(root != nullptr) {
        post_order(root -> left);
        post_order(root -> right);
        cout << root -> val;
    }
}

int main()
{
    string qx, zx;
    while(cin >> qx >> zx) {
        node *root = createTree(qx, zx);
        post_order(root);
        cout << endl;
    }
    return 0;
}

相关文章

  • 二叉树遍历算法

    二叉树遍历算法有4种,先序、中序、后序和层序遍历 先序遍历:先根、后左、再右中序遍历:先左、后根、再右后序遍历:先...

  • 二叉树的前序遍历、中序遍历、后序遍历、层次遍历

    二叉树的遍历方式主要有:先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是父节点被访问的次序。若在...

  • 数据结构与算法二叉树的遍历与线索二叉树以及森林

    1.二叉树的遍历先序遍历、中序遍历、后序遍历 2.层次遍历利用队列实现 3.由遍历序列构成二叉树先序、后序可以与众...

  • 二叉树的遍历算法

    递归版本 先序遍历: 中序遍历: 后序遍历: 非递归版本 先序遍历: 中序遍历: 后序遍历: 层次遍历:

  • 二叉树的操作

    /*主要内容:1、实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式*/ 实现二叉树的先序、中序、后序遍历...

  • 1. 二叉树的遍历 二叉树的遍历可以有三种 : 先序、 中序、 后序遍历 。先序是根左右 ,中序是左根右 ,后序是...

  • goLang 二叉树遍历(递归 非递归 前序遍历 中序遍历 后序

    goLang 二叉树遍历(递归 非递归 前序遍历 中序遍历 后序遍历 层序遍历) 前序遍历 中序遍历 后序遍历 代...

  • 67_二叉树的典型遍历方式

    关键词:先序遍历、中序遍历、后序遍历 0. 先序遍历(Pre-Order Traversal) 二叉树为空:无操作...

  • 二叉树遍历

    问题:根据先序遍历和中序遍历,求解后序遍历 思路: 第一步,将先序和中序字符串进行划分。先序:1--247--35...

  • Java 二叉树

    创建一个二叉树对象 build 一个二叉树 遍历 先序遍历 后序遍历 中序遍历 先序遍历的结果为:0 1 3...

网友评论

    本文标题:根据二叉树先序和中序遍历得出后序遍历

    本文链接:https://www.haomeiwen.com/subject/thesrqtx.html