二叉树的构建与遍历

news2024/11/25 12:53:47

在介绍二叉树的篇章中,我们用方法简单创建了一个二叉树,如下代码: 

 public treeNode creattree(){
        treeNode A=new treeNode('A');
        treeNode B=new treeNode('B');
        treeNode C=new treeNode('C');
        treeNode D=new treeNode('D');
        treeNode E=new treeNode('E');
        treeNode F=new treeNode('F');
        A.left=B;
        A.right=C;
        B.left=D;
        C.left=E;
        C.right=F;
        return A;
    }

 但如果给定一个字符串,我们照上述代码写的话就多而复杂,有人问,创建一个二叉树不是最少含有一个中序遍历和前(后)序遍历才能唯一确定吗?下题给定‘#’为空树,那么我们只需要一个遍历结果即可构建一个唯一二叉树,题目如下:

题目链接二叉树遍历icon-default.png?t=O83Ahttps://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId=60&&tqId=29483&rp=1&ru=/activity/oj&qru=/ta/tsing-kaoyan/question-ranking

题目要求

输入格式

输出格式

样例

解题代码

 思路:

        1、构建TreeNode类

        2、creatTree方法:创建根节点为空,如果第i个字符为#,则i++;否则创建val为第i个字符的根节点,接着以根节点左右子树为新子树继续构建节点

        3、编写中序遍历方法

import java.util.Scanner;

class TreeNode{
    public char val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(char val){
        this.val=val;
    }
}
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String str=in.nextLine();
            TreeNode root=creatTree(str);
            inorder(root);
        }
    }
    public static int i=0;

    public static TreeNode creatTree(String str){
        TreeNode root=null;
        if(str.charAt(i)!='#'){
            root=new TreeNode(str.charAt(i));
            i++;
            root.left=creatTree(str);
            root.right=creatTree(str);  
        }else{
            i++;
        }
        return root;
    } 
    public static void inorder(TreeNode root){
        if(root==null){
            return;
        }
        inorder(root.left);
        System.out.printf(root.val+" ");
        inorder(root.right);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新大话西游图文架设教程

开始架设 1. 架设条件 新大话西游架设需要准备: linux 系统服务器,建议 CentOs 7.6或以上版本游戏源码,。 2. 安装宝塔面板 宝塔是一个服务器运维管理软件,安装命令: yum install -y wget && wget -O in…

zabbix7.0配置中文界面

Zabbix 是一个广泛使用的开源监控解决方案,支持多种语言界面。本文将详细介绍如何配置 Zabbix 以使用中文界面,从而提高用户体验和可读性。 1. 环境准备 在开始配置之前,请确保你已经安装并运行了 Zabbix 服务器、前端和数据库。如果你还没有…

成品婚恋交友相亲源码打包APP小程序H5公众号可打包小程序APP公众号H5源码交付支持二开

聊天交友系统开发专业语聊交友app开发搭建同城交友源码开发婚恋交友系统相亲app小程序H5婚恋交友小程序的定制开发与行业新机遇婚恋交友app红娘连线系统app小程序开发一站式开发系统源码:婚恋交友H5与小程序开发详解 电商运营技术服务源码系统php相亲交友平台APP婚恋…

前端优化之路:git commit 校验拦截

但是想要做到高效落地执行,就需要做些别的功课,先展示下成果图 需要了解git hooks,它是git的钩子,就像vue拥有自己的钩子一样。 官方文档:https://git-scm.com/docs/githooks 项目安装 husky,建议稳定版本…

Linux进程间通信(个人笔记)

Linux进程通信 1.进程通信介绍1.1进程间通信目的1.2进程间通信发展1.3进程间通信的具体分类 2.管道2.1匿名管道2.1.1代码实例2.1.2 fork共享管道原理2.1.3 管道的读写规则与特点2.1.4 进程池 2.2 命名管道2.2.1 命名管道的创建2.2.2匿名管道与命名管道的区别2.2.3代码实例 3.Sy…

Spring Boot洗衣店订单系统:数据驱动的决策

3系统分析 3.1可行性分析 通过对本洗衣店订单管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本洗衣店订单管理系统采用JAVA作为开发语言,S…

如何安装Llama3.1 —— 附一键安装包!

一键安装包文末领取! 下载地址 软件:Llama版本:3.1语言:简体中文大小:645 MB安装环境:Win10及以上版本(64bit) 软件简介 ‌‌LLaMA模型是Meta研发的大语言模型‌,旨在帮助研究人员推进他们…

vue-jsonp的使用和腾讯地图当前经纬度和位置详情的获取

1.下载: npm install –save vue-jsonp2.main.js中引入: //腾讯逆地址解析会用到jsonp import {VueJsonp} from vue-jsonp; Vue.use(VueJsonp);3.腾讯地图中使用 uniapp中获取*经纬度*和通过经纬度获取当前**位置详情** //获取当前经纬度 getLocation…

【AI系统】AI在不同领域的应用与行业影响

本文将探讨AI在不同技术领域和行业中的广泛应用,以及这些应用如何影响和改变我们的世界。 I. 引言 AI技术正日益渗透到各个技术领域,从计算机视觉到自然语言处理,再到音频处理,AI的应用正变得越来越广泛。这些技术的发展不仅推动…

影刀RPA实战:制作Excel工资条

1.实战目标 使用Excel制作工资条是一种常见的做法,每个公司几乎都有这样的需求,我们先介绍下使用excel手动制作工资条的方法,看看不足之处,使用影刀RPA又会给我们带来怎样的便利,让我们更倾向于选择影刀来处理。 工资…

世昌股份与吉利亲密关系:资产负债率远高同行,应收账款周转率偏弱

《港湾商业观察》杨丹妮 9月23日,河北世昌汽车部件股份有限公司(以下简称“世昌股份”)回复了第一轮审核问询函,公司于今年六月递表北交所,保荐机构为东北证券。 近几年新能源汽车如日中天,世昌股份也因此…

系统端口号被占用问题处理(WindowsLinux系统)

Windows 直接kill占用端口的进程 WinR 输入cmd 打开命令行窗口 1.查询本地已被占用的端口号: 下面以8080端口为例: netstat -aon|findstr "8080" 查看本地8080端口进程的PID 2.杀死"xxxx"端口号的进程 (下面的22868是 你查到…

DAY5 数组

概念 数组是一个数据容器,可用来存储一批同类型的数据。 存储原理 int[] arr new int[]{12,24,36}; 理解为数组对象中存储的为地址信息 一维数组 静态数组 数据类型[] 数组名 new 数据类型[]{元素1,元素2,......}; 数据类型[] 数组名 {元素1,元…

惯导+卫导组合高精度模块UM981系列新品特点

近日,和芯星通发布了UM981系列全系统全频高精度RTK/INS组合定位模块,可同时跟踪 BDS B1I/B2I/B3I/B1C/B2a/B2b,GPS L1/L2/L5,GLONASS G1/G2/G3,Galileo E1/E5a/E5b/E6,QZSS L1/L2/L5,NavIC L5&a…

Extreme Compression of Large Language Models via Additive Quantization阅读

文章目录 Abstract1. Introduction2. Background & Related Work2.1. LLM量化2.2. 最近邻搜索的量化 3.AQLM:Additive Quantization for LLMs3.1. 概述3.1.0 补充**步骤说明****举例说明** 3.2. 阶段1:代码的波束搜索3.3. 阶段2:码本更新3.4. 阶段3&…

Java中对象的比较(equals、Comparable、Comparator)

文章目录 一、PriorityQueue中插入对象二、元素的比较 2.1、基本类型的比较2.2、对象比较的问题三、对象的比较 3.1、覆写基类的equals3.2、基于Comparable接口类的比较3.3、基于比较器比较3.4、三种方式对比 一、PriorityQueue中插入对象 前篇我们讲解了优先级队列&#xff0…

mpi 示例小程序集锦

1,小ring 程序 数据从rank 0开始向外传递,rank1收到后再传递给 rank2,以此类推 除了rank0,程序一开始时,每个rank先进入接收等待状态,像是多米诺骨牌,都立起来。 rank 0开始倒下,依…

设备管理系统:强化特种设备安全监管的智能引擎

设备管理系统在特种设备安全监管中发挥着至关重要的作用,主要体现在以下几个方面: 一、实时监控与预警 运行状态监控:设备管理系统能够实时监控特种设备的运行状态,包括开机时间、运行时间、停机时间等关键参数。这有助于及时发现…

初级网络工程师之从入门到入狱(六)

本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 网络工程师从入门到入狱 前言一、vlan与vlanif二、路由器之三层通信方式2.1、路由器物理接口2.2、子接口2.3、vlanif 三、数…

Tars简介

定义:Tars协议的高性能rpc开发框架 功能:可扩展协议编解码、高性能rpc通信框架、名字路由和发现、发布监控、日志统计、配置管理 整体架构 交互流程 1.服务发布 2.管理命令 3.心跳上报 4.信息上报 server服务运行后,会定期上报统计信息到s…