首页 > 编程语言 >【华为OD机试真题】C卷-二叉树的广度优先遍历(JAVA)

【华为OD机试真题】C卷-二叉树的广度优先遍历(JAVA)

时间:2024-03-27 20:29:54浏览次数:34  
标签:java 遍历 JAVA String 真题 util 二叉树 import post

一、题目描述

【华为OD机试真题】C卷-二叉树的广度优先遍历(JAVA)

题目描述:

有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。
现有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点->右孩子)的结果,请你输出层序遍历的结果。

二、输入输出

输入描述:
每个输入文件一行,第一个字符串表示后序遍历结果,第二个字符串表示中序遍历结果。(每串只包含大写字母)
中间用单空格分隔。

输出描述:
输出仅一行,表示层序遍历的结果,结尾换行。

三、参考示例

用例
输入:
CBEFDA CBAEDF
输出:
ABDCEF

四、解题思路

  1. 定义两个方法,splitLR用于分割左右子树,getResult用于获取最终结果。
  2. splitLR方法中,根据后序遍历和中序遍历的特点,找到根节点,划分左右子树,并将子树加入队列。
  3. getResult方法中,先处理根节点,然后遍历队列,依次处理子树,直到队列为空。
  4. 最后将结果列表中的字符连接起来,返回最终结果。

五、参考代码

/*
 * @Author: mgc
 * @Date: 2024-02-02 17:47:00
 * @LastEditors: Do not edit
 * @LastEditTime: 2024-02-02 17:48:55
 */

// import java.util.*;
// import java.util.HashMap;
// import java.util.Scanner;
// import java.util.regex.Matcher;
// import java.util.stream.Stream;
// import java.util.regex.Pattern;
// import java.util.stream.Collectors;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 读取输入的后序遍历和中序遍历结果
        String post = sc.next();
        String mid = sc.next();

        // 输出结果
        System.out.println(getResult(post, mid));
    }

    // 获取最终结果的方法
    public static String getResult(String post, String mid) {
        LinkedList<String[]> queue = new LinkedList<>();
        ArrayList<Character> result = new ArrayList<>();

        // 划分左右子树
        splitLR(post, mid, queue, result);

        // 处理队列中的子树
        while (!queue.isEmpty()) {
            String[] tmp = queue.removeFirst();
            splitLR(tmp[0], tmp[1], queue, result);
        }

        // 构建最终结果字符串
        StringBuilder sb = new StringBuilder();
        for (Character c : result) {
            sb.append(c);
        }
        return sb.toString();
    }

    // 划分左右子树的方法
    public static void splitLR(String post, String mid, LinkedList<String[]> queue,
                               ArrayList<Character> result) {
        char rootElement = post.charAt(post.length() - 1);
        result.add(rootElement);

        int rootIndex = mid.indexOf(rootElement);
        int leftLength = rootIndex;

        // 划分左子树
        if (leftLength > 0) {
            String leftPost = post.substring(0, leftLength);
            String leftMid = mid.substring(0, rootIndex);
            queue.addLast(new String[] {leftPost, leftMid});
        }

        // 划分右子树
        if (post.length() - 1 - leftLength > 0) {
            String rightPost = post.substring(leftLength, post.length() - 1);
            String rightMid = mid.substring(rootIndex + 1);
            queue.addLast(new String[] {rightPost, rightMid});
        }
    }
}

六、华为OD机试真题汇总目录

    【华为OD机试】真题汇总A+B+C+D券(Python实现)

    【华为OD机试】真题汇总A+B+C+D卷(JAVA实现)

    【华为OD机试】真题汇总A+B+C+D卷(C++实现)

标签:java,遍历,JAVA,String,真题,util,二叉树,import,post
From: https://blog.csdn.net/u014481728/article/details/137048491

相关文章

  • 基于JAVA SSM 弹幕视频网站项目 (内附计算机毕业设计LW + PPT+ 源码)
    弹幕视频网站项目技术栈该项目采用了以下核心技术栈:后端框架/库:ssm数据库:MySQL5.7前端技术:JSP,JavaScript,HTML5,CSS3服务器:Tomcat7开发工具:Eclipse/MyEclipse/IDEA,Navicat11JDK版本:JDK1.8Maven包:Maven3.3.9核心功能描述前台功能模块:包括视频信息展示、商......
  • 个人简历 - java开发版本 (24应届毕业生 - 找工作!)
    老板们觉得合适的请联系一下哦~感恩!求职目标: java开发工程师基本信息:姓名: 付盟                                           性别: 男生日: 2001年12月13日                  年龄:22岁邮箱:181202......
  • Java 发送邮件(2024-03)
    1\2\packageorg.jeecg.common.util.io;importcom.sun.mail.util.MailSSLSocketFactory;importlombok.extern.slf4j.Slf4j;importorg.jeecg.common.util.DateUtils;importjavax.activation.DataHandler;importjavax.activation.DataSource;importjavax.acti......
  • Java内存马2-Spring内存马
    Spring内存马目录Spring内存马1、Spring&SpringMVC简介2、环境搭建3、Controller内存马4、踩坑日记5、Interceptor内存马1、Spring&SpringMVC简介Spring框架是一个开源的Java应用框架,它提供了一个综合的基础设施,用于构建Java应用程序。Spring框架的主要技术包括:依赖注入(Dep......
  • AJAX(Asynchronous JavaScript and XML)是一种用于创建交互式网页应用程序的技术
    AJAX(AsynchronousJavaScriptandXML)是一种用于创建交互式网页应用程序的技术。通过在后台与服务器进行异步通信,实现在不重新加载整个页面的情况下更新部分页面内容。而Spring是一个开源的Java框架,它提供了一种简化Java开发的方式,包括Web应用程序开发。下面是一个使用AJAX......
  • 基于JAVA的超市管理系统设计与实现
    摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本超市管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达......
  • java智慧工地源码 大型建筑公司应用的智慧工地系统源码 智慧工地建筑管理系统源码
    java智慧工地源码大型建筑公司应用的智慧工地系统源码智慧工地建筑管理系统源码智慧工地是智慧地球理念在工程领域的具体体现,它代表了一种全新的工程全生命周期管理理念。通过运用信息化手段,智慧工地能够精确设计和模拟工程项目,实现互联协同、智能生产、科学管理的施工项目......
  • tomcat 启动报错javax.naming.NameNotFoundException: 名称[xxx.LoginFilter/xxxServi
    本地测试没问题,部署到服务器上的tomcat,启动报错javax.naming.NameNotFoundException:名称[xxx.LoginFilter/xxxService]未在此上下文中绑定可能是由于在Tomcat的配置文件中,资源名称[xxxx]没有正确配置或者引用。为了解决这个问题,你可以尝试以下步骤:1、检查你的Tomcat配置文......
  • Java进程假死排查 《二》
    在使用docker部署的项目可以参考第一篇文章:https://www.cnblogs.com/heavenTang/p/18027006如果是非docker部署的,那么往下看:步骤1.top输入top命令,找到占用CPU最高的进程。按Shift+P键排序:可以看到CPU占用最高的pid是92129。步骤2.top-Hppid查看指定进程......
  • 2024年三款企业级Java报表工具测评,总有一个适合你!
    报表是企业管理不可或缺的工具,通过将庞大的数据整理成易懂的图表和图形,其为决策者提供了直观的洞察力。准确的报表能够揭示业务趋势、关键指标和潜在机会,助力企业实时监控绩效、制定战略,并作出迅速而明智的决策。无论规模大小,企业都能从报表中获得精准、可视的数据,帮助其更高效、......