3384. 二叉树遍历

news/2024/7/15 19:01:55 标签: 深度优先, 图论, 算法

Powered by:NEFU AB-IN

Link

文章目录

  • 3384. 二叉树遍历
    • 题意
    • 思路
    • 代码

3384. 二叉树遍历

  • 题意

    编写一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。
    例如如下的先序遍历字符串: abc##de#g##f### 其中 # 表示的是空格,空格字符代表空树。
    建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

  • 思路

    给出 **先序遍历 + 所有结点(包括空节点)**也可以唯一确定一个二叉树
    首先根据先序遍历进行建树

    • 注意建树一定要以元素值为下标建树!!!
      再中序遍历进行输出
  • 代码

    /*
    * @Author: NEFU AB-IN
    * @Date: 2023-01-30 11:32:05
    * @FilePath: \Acwing\test\test.cpp
    * @LastEditTime: 2023-04-18 19:30:13
    */
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    #undef int
    
    #define SZ(X) ((int)(X).size())
    #define ALL(X) (X).begin(), (X).end()
    #define IOS                                                                                                            \
        ios::sync_with_stdio(false);                                                                                       \
        cin.tie(nullptr);                                                                                                  \
        cout.tie(nullptr)
    #define DEBUG(X) cout << #X << ": " << X << '\n'
    typedef pair<int, int> PII;
    
    const int N = 1e2 + 10, INF = 0x3f3f3f3f;
    
    unordered_map<char, char> l, r;
    int id;
    string s;
    
    // 根据节点的值进行建树,而不是节点的下标
    char dfs()
    {
        char rt = s[++id]; // 这句话放哪,取决于是什么遍历
        if (rt == '#' || id >= SZ(s))
            return '1';
        l[rt] = dfs();
        r[rt] = dfs();
        return rt;
    }
    
    void dfs2(char root)
    {
        if (root == '1')
            return;
        dfs2(l[root]);
        cout << root << " ";
        dfs2(r[root]);
        return;
    }
    
    signed main()
    {
        cin >> s;
        s = " " + s;
    
        char root = dfs();
        dfs2(root);
        return 0;
    }
    

http://www.niftyadmin.cn/n/238110.html

相关文章

51单片机入门

文章目录 一、安装keil5及proteus二、MCS-51单片机结构与原理(一).8051单片机基本组成(二).8051单片机引脚1.电源引脚2.时钟电路引脚3.控制信号引脚4.输入/输出端口 (三) 并行输入/输出端口结构 三、单片机cx51编程基础(一).变量定义(二).数据类型(三).存储类型(四).Cx51语言程…

go之基于rabbitmq的火山云服务器弹性伸缩管理程序

Author: wencoo Blog&#xff1a;https://wencoo.blog.csdn.net/ Date: 18/04/2023 Details:文章目录 项目背景项目功能模块实现configMq.jsonconfigECS.jsonconfigDB.json 完整代码打赏 项目背景 项目服务器不够用了&#xff0c;需要弹性伸缩服务器&#xff0c;准备使用火山的…

Leetcode35. 搜索插入位置

搜索插入位置 一、题目描述&#xff1a;二、解决思路和代码1. 解决思路2. 代码 一、题目描述&#xff1a; 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必…

java 第四章 面向对象(下)(萌新必看基础概念详解)

4.1 类的继承 4.1.1什么是继承 在Java中&#xff0c;继承是一种使一个类&#xff08;称为子类&#xff09;可以使用另一个类&#xff08;称为父类或超类&#xff09;的属性和方法的机制。当一个类继承另一个类时&#xff0c;子类将自动获得父类的公有和受保护的属性和方法&am…

C6678-控制GPIO输入/输出

C6678-控制GPIO输入/输出 术语寄存器起始地址原理输入输出测试中断功能原理中断原理框图芯片中断控制器原理框图内核中断控制器原理框图中断路由架构一级中断表二级中断表CIC0二级中断CIC1二级中断CIC2二级中断CIC3 中断演示代码参考资料 术语 NMI&#xff1a; 不可屏蔽中断CI…

回溯递归(例题+思路+代码)

题目描述 leetcode 77 思路 组合问题适合用回溯求解。 经典解法&#xff1a;for循环 内部回溯。 每次进入回溯方法时&#xff0c;先判断终止条件&#xff0c;再进行当前层的循环&#xff0c;循环进行下一层递归。 代码 class Solution {public List<List<Integer&…

Linux系统之部署ZFile在线网盘服务

Linux系统之部署ZFile在线网盘服务 一、ZFile介绍1.ZFile简介2.ZFile特点 二、本地环境介绍1.本次实践说明2.本地环境规划 三、安装环境依赖1.安装java2.检查java版本 四、下载ZFile软件1.创建安装部署目录2.声明安装路径3.下载ZFile软件包4.解压ZFile软件包5.授权启动停止脚本…

数学建模第一天:数学建模先导课之MATLAB的入门

目录 一、MATLAB的简介 二、Matlab基础知识 1. 变量 ①命名规则 ②特殊变量名 2、数学符号与函数调用 ①符号 ②数学函数 ③自定义函数 三、数组与矩阵 1、数组 ①创建数组 ②访问数组元素 ③数组运算 2、矩阵 ①定义 ②特殊矩阵 ③矩阵运算 四、控制流 …