首页 > 其他分享 >洛谷题单指南-二叉树-P1030 [NOIP2001 普及组] 求先序排列

洛谷题单指南-二叉树-P1030 [NOIP2001 普及组] 求先序排列

时间:2024-03-15 16:14:18浏览次数:32  
标签:NOIP2001 求先序 后序 int 中序 二叉树 序列 post

原题链接:https://www.luogu.com.cn/problem/P1030

题意解读:已知中序、后序,求先序。

解题思路:

洛谷题单指南-二叉树-P1827 [USACO3.4] 美国血统 American Heritage非常类似,不在介绍过程,直接给出代码。

100分代码:

#include <bits/stdc++.h>
using namespace std;

string in, post;

//in_l:中序序列的起点,in_r:中序序列的终点,post_l:后序序列的起点,post_r:后序序列的终点
void preorder(int in_l, int in_r, int post_l, int post_r)
{
    if(in_l > in_r) return; //没有节点
    //先通过后序序列找根节点
    int root = post_r; //根节点位置为后序序列终点

    //在中序序列中找到根节点的位置
    int i = in_l;
    while(in[i] != post[root]) i++;

    cout << post[root]; //递归之前输出根即前序遍历
    // in_l ~ i-1即左子树的中序序列, 一共有i-in_l个元素
    // i+1 ~ in_r即右子树的中序序列, 一共有in_r-i个元素
    // post_l ~ post_l+i-in_l-1即左子树的后序序列
    // post_l+i-in_l ~ post_r-1即右子树的后序序列
    preorder(in_l, i - 1, post_l, post_l + i - in_l - 1); //对左子树递归调用找根
    preorder(i + 1, in_r, post_l + i - in_l, post_r - 1); //对右子树递归调用找根
}

int main()
{
    cin >> in >> post;
    preorder(0, in.size() - 1, 0, post.size() - 1);
    return 0;
}

 

标签:NOIP2001,求先序,后序,int,中序,二叉树,序列,post
From: https://www.cnblogs.com/jcwy/p/18075630

相关文章

  • 二叉树的垂序遍历
    说在前面......
  • 数据结构之链式二叉树
    当我们初步了解二叉树后我们就可以进一步去深入学习二叉树了1.链式二叉树的遍历这里我们先去定义链式二叉树的结构分为两个指针一左一右他们分别指向左子树和右子树typedefintBTDataType;typedefstructBinaryTreeNode{ BTDataTypedata; structBinartTreeNode......
  • 代码随想录算法训练营第day17|110.平衡二叉树 、 257. 二叉树的所有路径 、404.左叶子
    目录a.110.平衡二叉树b.257.二叉树的所有路径 c.404.左叶子之和a.110.平衡二叉树力扣题目链接(opensnewwindow)给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例1......
  • 洛谷 P5018 对称二叉树
    题目背景NOIP2018普及组T4题目描述一棵有点权的有根树如果满足以下条件,则被轩轩称为对称二叉树:二叉树;将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等。下图中节点内的数字为权值,节点外的 idid 表示节点编号。现在给出一棵二叉树,希望你找出......
  • P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值
    题目描述给定一棵包含N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是​,如下图所示: 现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。注:根的深度是 1......
  • 二叉树
    节点类定义classTreeNode{privateStringvalue;privateTreeNodeleft;privateTreeNoderight;publicTreeNode(Stringvalue){this.value=value;this.left=null;this.right=null;}publicvoidsetLeft(Tr......
  • 第六章二叉树——二叉树的最大深度
    吾日三省吾身还记得的梦想吗正在努力实现它吗可以坚持下去吗目录吾日三省吾身力扣题号:104.二叉树的最大深度-力扣(LeetCode)题目描述:思路解法一:递归实现思路代码逻辑解释注意事项代码实现内存优化总结(╯°□°)╯︵┻━┻(⌐■_■)(¬‿¬)(´・ω・`)(͡°͜......
  • 236. 二叉树的最近公共祖先c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*lowestCommonAncestor(structTreeNode*root,structTreeNode*p,structTreeNode*q){......
  • leedcode-完全二叉树的节点个数
    自己写的,使用广度优先BFS,迭代:classSolution:defcountNodes(self,root:Optional[TreeNode])->int:#如果根节点为空,则树中节点数为0ifnotroot:return0#初始化队列,并将根节点放入队列中queue=[root]......
  • 洛谷题单指南-二叉树-P5076 【深基16.例7】普通二叉树(简化版)
    原题链接:https://www.luogu.com.cn/problem/P5076题意解读:此题本质上是要实现一个二叉搜索树的功能。解题思路:从数据规模10^4来看,只要复杂度在n^2范围内基本上是可以通过的,下面给出两种做法:1、有序数组法对应5个操作的实现逻辑如下:操作一:查x的排名。直接通过二分查找>=x的第......