小白水平理解面试经典题目leetcode. 606 Construct String from Binary Tree【递归算法】

news2025/1/18 17:05:04

Leetcode 606. 从二叉树构造字符串

题目描述

在这里插入图片描述

例子

在这里插入图片描述
在这里插入图片描述

小白做题

坐在自习室正在准备刷题的小白看到这道题,想想自己那可是没少和白月光做题呢,也不知道小美刷题刷到哪里了,这题怎么还没来问我,难道是王谦谦去做题了?

这时候黑长直女神突然进到教室过来问:小白,你看到二叉树题目了吗,这道606的题目,感觉描述的很复杂,好像是说树结构转换为字符串类型,你有什么好思路吗?

小白内心镇定:这机会不就来了吗,小美,听说阮经天的《周处除三害》上映了,有机会一起去看看吧?

在这里插入图片描述
哦,不是,题目描述意思说的简单一些。

这种题目我们首先把他进行下条件梳理,原来描述的是太复杂了,而且题目拽了一堆转悠名词,我们最好忽略它。
我们把之前的题目进行瘦身环节,你是风儿我是沙,让大片描述非走吧。
在这里插入图片描述

  • 给定二叉树的根,通过先序遍历的方式从二叉树构造一个由括号和整数组成的字符串,并返回。

  • 如果根的右节点为空,则省略空括号对,这不会影响二叉树的表示。

  • 如果左节点为空并且右节点有一个值,其中包含左节点的空括号,如果省略左节点,则会影响二叉树表示。

[1 null 2] --> 1(()(2)) 如果省略左侧 () 空括号,则会影响二叉树 1(2) --> 表示左节点为 2,右节点为 null

解题环节

树的题目我们首先按照递归的算法来考虑,另外很重要的一点,就是递归的终止条件。
所以我们要考虑根为null情况时候,是返回空字符串的
if (root == null) return “”
case 0:是要返回S字符串,这种条件下,左子树和右子树分别都是为空
case 1: 如果右子树为空,返回左子树字符串
正常返回左子树与右子树的值。

考虑好条件后,我们接下来考虑用StringBuilder来进行字符串的存储。

左子树的表达方式:String left = tree2str(root.left);
右子树的表达方式:String right = tree2str(root.right);

最后的重点来了,就是如果右子树为空,那么我们就返回空;如果不为空,那么我们就把右子树加入到string字符串中。

小美:小伙子,可以啊,这不仅进行了解题,阅读理解也有俩下子!不过电影票要你买单哦。

小白:没问题,谁叫为了“真爱”呢。
在这里插入图片描述

真正面试环节

面试官:你可以解答这道”从二叉树构造字符串“的题目吗,来看看你对树结构的理解。

小白:嘿嘿,这不巧了么这不是。
在这里插入图片描述

	public String tree2str(TreeNode root) {
		// 设置递归终结条件
        if(root == null) return "";
        StringBuilder sb = new StringBuilder();
		
        int val = root.val;

        // 递归方法,来找到左,右子树的值
        String left = tree2str(root.left);
        String right = tree2str(root.right);

        sb.append(val+"");

        // 只有当左右子树都为空的时候才能忽略左子树
        // 否则就需要加入左子树, 就算是没有值也需要加上
        sb.append((left.isEmpty() && right.isEmpty()) ? "" : "("+left+")");

        // 只有当右子树不为空的时候才加入右子树的值
        sb.append((right.isEmpty()) ? "" : "("+right+")");

        return sb.toString();
    }

小明:OK,完事儿,等着面试官来表扬自己吧。他肯定会说:小子,你是个好手!工位都给你准备好了,工资你说了算。

面试官:矮油,不错啊,不过你这能不能写个测试啊。

小明OS:今年这个找工市场,人言洛阳花似锦,偏我来时不逢春。。。不是,怎么还让我些test case 啊!
在这里插入图片描述

	public static void main(String[] args) {
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        tree2Str606 solution = new tree2Str606();
        String res = solution.tree2str(root);

        System.out.print(res + " ");

    }

小白:您好,面试官,这回可以了吧,我终于有钱请小美看电影了!
在这里插入图片描述

============================================================================
🍀🍀🍀🍀🍀🍀更多算法题解请看 面试数据结构与算法总结分类+leetcode目录【基础版】

编码道路漫漫,只要先看脚下的路,徐徐前进即可。

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

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

相关文章

MES系统实施的几大关键步骤

在制造业中,MES管理系统成为了提升生产效率、优化资源配置和确保产品质量的关键工具。然而,由于MES管理系统的复杂性,成功实施并发挥其最大效益需要一系列精心策划的步骤。本文将详细介绍MES管理系统成功实施的几大关键步骤,以帮助…

腾讯云服务器4核8G性能,和阿里云比怎么样?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

【王道操作系统】ch1计算机系统概述-02操作系统的发展历程

文章目录 【王道操作系统】ch1计算机系统概述-02操作系统的发展历程01 手工操作阶段02 批处理阶段(1)单道批处理系统(2)多道批处理系统 03 分时操作系统04 实时操作系统(1)硬实时系统(2&#xf…

2024年2月19日-2月25日周报

文章目录 1. 本周计划2. 完成情况2.1 DCGANS网络架构2.2 SRGAN网络架构 3. 总结及收获4.下周计划 1. 本周计划 学习网络架构DCGANS和SRGAN 2. 完成情况 2.1 DCGANS网络架构 模型的核心:(论文链接) 取消池化层,使用带步长(str…

docker安装flink

docker安装flink 5.1、拉取flink镜像,创建网络 docker pull flink docker network create flink-network5.2、创建 jobmanager # 创建 JobManager docker run \-itd \--namejobmanager \--publish 8081:8081 \--network flink-network \--env FLINK_PROPERTIES&…

多特征变量序列预测(10)基于麻雀优化算法的CEEMDAN-SSA-Transformer-BiLSTM预测模型

目录 往期精彩内容: 前言 1 多特征变量数据集制作与预处理 1.1 导入数据 1.2 CEEMDAN分解 1.3 数据集制作与预处理 2 麻雀优化算法 2.1 麻雀优化算法介绍 2.2 基于Python的麻雀优化算法实现 2.3 麻雀优化算法-超参数寻优过程 3 基于Pytorch的CEEMDAN SSA…

【论文阅读】深度学习在过冷沸腾气泡动力学分割中的应用

Application of deep learning for segmentation of bubble dynamics in subcooled boiling 深度学习在过冷沸腾气泡动力学分割中的应用 期刊信息:International Journal of Multiphase Flow 2023 级别:EI检索 SCI升级版工程技术2区 SCI基础版工程技术3区…

《系统架构设计师教程(第2版)》第5章-软件工程基础知识-05-净室软件工程(CSE)

文章目录 1. 概述2. 理论基础2.1 函数理论2.2 抽样理论 3. 技术手段3.1 增量式开发3.2 基于函数的规范与设计3.3 正确性验证3.4 统计测试 (Statistically Based Testing) 和软件认证 4. 应用与缺点1)太理论化2)缺少传统模块测试3)带有传统软件…

leetcode:135.分发糖果

解题思路:分发糖果时,既要考虑左面,又要考虑右面,如果同时考虑,就会顾此失彼,所以我们可以先考虑右边,再考虑左边,分别正序、逆序进行遍历。逆序遍历时相当于重置candy数组。 运用贪…

Rocky Linux 运维工具 systemctl

一、​​systemctl​的简介 ​​systemctl​是用于管理系统服务的命令行工具。​systemctl​命令可以启动、停止、重启或重新加载服务,并管理它们。 二、systemctl​的参数说明 序号参数描述1start启动指定系统服务2stop停止指定系统服务3status显示指定系统服务的…

计算机二级C语言的注意事项及相应真题-1-程序设计

目录 前言:1.将ss所指字符串中所有下标为奇数位置上的字母转换成大写2.若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后3.计算并输出给定整数n的所有因子(不包括1与n自身&#xff09…

嵌入式学习29-进程间通信

1.进程间的通信: 1.管道 2.信号 3.消息队列 4.共享内存 5.信号灯 6.套接字 1.管道: 1.无名管道 无名管道只能用于具有亲缘关系的进程间通信 pipe int pipe(int pipefd[2]); 功能: …

uniapp基于android的旅游服务微信 python+nodejs微信小程序_9wv9e

本Android的旅游服务APP采用Java语言来进行开发,从角色上分为用户和管理员两部分,用户功能主要是在前台,前台部分主要实现了用户注册登录,首页,广场,旅游景点,酒店信息,酒店预订&…

哪个牌子的电视盒子好用?2024超强电视盒子排名

最近很多朋友问我电视盒子的相关问题,就目前来说,电视盒子的地位依然是不可取代的。我近来要发布的测评内容是哪个牌子的电视盒子好用,耗时两周进行对比后整理了电视盒子排名,看看哪些电视盒子是最值得入手的吧。 NO.1——泰捷新品…

Java 1.8 docker 镜像制作

文章目录 一、下载文件二、精简JRE三、Dockerfile四、构建镜像五、容器测试 一、下载文件 glibc 下载地址 glibc-2.33-r0.apk glibc-bin-2.33-r0.apk glibc-i18n-2.33-r0.apk rsa sgerrand.rsa.pub jre 1.8 jre-8u201-linux-x64.tar.gz 二、精简JRE 解压 tar -zxvf jre-8…

亚信安慧AntDB数据库:实时流数据处理的不二选择

亚信安慧AntDB数据库是一种解决实时流数据处理中数据容灾和一致性问题的创新性解决方案。它不仅能够在处理流数据时确保数据的完整性和准确性,还能精确判断数据故障点,从而避免可能的数据损失和错误。AntDB数据库采用先进的技术和算法,能够实…

06 Qt自绘组件:Switch动画开关组件

系列文章目录 01 Qt自定义风格控件的基本原则-CSDN博客 02 从QLabel聊起:自定义控件扩展-图片控件-CSDN博客 03 从QLabel聊起:自定义控件扩展-文本控件-CSDN博客 04 自定义Button组件:令人抓狂的QToolButton文本图标居中问题-CSDN博客 0…

ISP代理是什么?跨境账号养号为什么要选择它?

在跨境出海业务中,代理IP对于您的在线任务至关重要,尤其是对于那些运行多个帐户的人来说。为您的帐户选择正确类型的代理对于确保帐户安全非常重要,劣质的IP容易使账号遭受封号风险。IPFoxy的多种代理IP类型应用范围各有侧重,其中…

如何在aws服务器上部署mysql

在AWS服务器上部署 MySQL 数据库可以通过以下步骤完成: 启动 EC2 实例: 在 AWS 控制台中启动一个 EC2 实例,选择适合你需求的实例类型和配置。 安全组配置: 确保你的 EC2 实例的安全组配置允许来自你的 IP 地址的 MySQL 连接。默…