首页 > 其他分享 >根据前序中序求后序(树)

根据前序中序求后序(树)

时间:2024-11-15 14:43:16浏览次数:3  
标签:遍历 后序 int 前序 key 中序求 中序 size

题目描述

给定一棵二叉树的前序遍历和中序遍历,求其后序遍历。

输入

读入2个两个字符串,每个一行,长度均小于等于26。 

第一行为前序遍历,第二行为中序遍历。 

二叉树中的结点名称以大写字母表示:A,B,C....。

输出

输出一行,为后序遍历的字符串。

样例输入 
ABC
CBA
样例输出   
CBA
思路 

遍历前序字符串,前序遍历的每一个字符都是某个子树的根,再在中序遍历中找到根,将其分为左子树,根,右子树,依次递归,以此建树,在后序遍历一下即可(我语文不好,详见代码)

代码
#include <bits/stdc++.h>
using namespace std;
int root,key;
string q,z;
struct the_tree
{
    int l,r;
    char data;
}tree[50];
int build(int l,int r)
{
    if(l>r||l<0||r>q.size()-1||r<0||l>q.size()-1||key>q.size()-1)
    {
        return -1;
    }
    else
    {
        char c=q[key];
        for(int i=l;i<=r;i++)
        {
            if(z[i]==c)
            {
                root=i;
                break;
            }
        }
        int ls=l;
        int le=root-1;
        int rs=root+1;
        int re=r;
        int x=++key;
        tree[x].data=c;
        tree[x].l=build(ls,le);
        tree[x].r=build(rs,re);
        return x;
    }
}
void hx(int step)
{
    if(step!=-1)
    {
        hx(tree[step].l);
        hx(tree[step].r);
        cout<<tree[step].data;
    }
}
int main()
{
    cin>>q>>z;
    build(0,q.size()-1);
    hx(1);
    return 0;
}

标签:遍历,后序,int,前序,key,中序求,中序,size
From: https://blog.csdn.net/Lucas55555555/article/details/143795883

相关文章

  • 数据结构 ——— 利用前序序列重建链式二叉树
    目录题目要求链式二叉树示意图​编辑代码实现 题目要求读入用户输入的一串前序遍历的字符串,根据此字符串建立一个链式二叉树例如前序遍历的字符串为:ABC##DE#G##F###;其中"#"表示空树链式二叉树示意图以此图的链式二叉树为例子那么此链式二叉树前序遍历转换为字符......
  • leetcode1008. 前序遍历构造二叉搜索树
    给定一个整数数组,它表示BST(即 二叉搜索树 )的 先序遍历 ,构造树并返回其根。保证 对于给定的测试用例,总是有可能找到具有给定需求的二叉搜索树。二叉搜索树 是一棵二叉树,其中每个节点, Node.left 的任何后代的值 严格小于 Node.val , Node.right 的任何后代的值......
  • 力扣(LeetCode)106. 从中序与后序遍历序列构造二叉树
    一、目标  给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。二、代码分析总体代码:/***Definitionforabinarytreenode.*publicclassTreeNode{*int......
  • C++算法练习-day38——106.从中序和后序遍历序列构造二叉树
    题目来源:.-力扣(LeetCode)题目思路分析题目要求根据一棵二叉树的中序遍历(inorder)和后序遍历(postorder)结果重建这棵二叉树。中序遍历的特点是左子树->根节点->右子树,而后序遍历的特点是左子树->右子树->根节点。利用这两个遍历的特点,我们可以递归地重建整棵树。后序......
  • 代码随想录算法训练营第十六天|leetcode513.找树左下角的值、leetcode112.路径总和、l
    1leetcode513.找树左下角的值题目链接:513.找树左下角的值-力扣(LeetCode)文章链接:代码随想录视频链接:怎么找二叉树的左下角?递归中又带回溯了,怎么办?|LeetCode:513.找二叉树左下角的值_哔哩哔哩_bilibili思路:就是用一个东西存储result,使用后续遍历,如果遇到了最深的那一个值,就......
  • 【算法】递归+深搜:106.从中序与后序遍历序列构造二叉树(medium)
    目录1、题目链接相似题目:2、题目3、解法函数头-----找出重复子问题函数体---解决子问题4、代码1、题目链接106.从中序与后序遍历序列构造二叉树(LeetCode)相似题目:105.从前序与中序遍历序列构造二叉树889.根据前序和后序遍历构造二叉树(LeetCode)2、题目3、解法......
  • 二叉树的递归遍历(前、中、后序)
    二叉树的递归遍历题目链接:前序遍历:LeetCode144中序遍历:LeetCode94后序遍历:LeetCode145描述给你二叉树的根节点root,返回它节点值的前序、中序、后序遍历。示例1:前序遍历输入:root=[1,null,2,3]输出:[1,2,3]示例2:中序遍历输入:root=[1,null,......
  • 数据结构 ——— 链式二叉树的前中后序遍历递归实现
    目录前言链式二叉树示意图​编辑手搓一个链式二叉树链式二叉树的前序遍历链式二叉树的中序遍历链式二叉树的后序遍历 前言在上一章学习了链式二叉树的前中后序遍历的解析数据结构———链式二叉树的前中后序遍历解析-CSDN博客接下来要学习的是代码实现链式二叉树......
  • 数据结构与算法——Java实现 46. 从前序与中序遍历序列构造二叉树
    努力的意义大概就是当好运来临的时候你觉得你值得                                                ——24.10.24105.从前序与中序遍历序列构造二叉树给定两个整数数组 preorder 和 inorder ,其中 preorder 是......
  • 代码随想录算法训练营day16| 513.找树左下角的值 112.路径总和 106.从中序和后序
    学习资料:https://programmercarl.com/0513.找树左下角的值.html#算法公开课递归、回溯返回值:True/False,root构建二叉树TrueNode(root_value)513.找树左下角的值(实例变量self.result,self.maxdepth;找到叶子节点,若深度>self.maxdepth,则更新最大深度;只考虑左和右子树,用递归+......