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

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目录【基础版】

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Java和PostGis的全国A级风景区数据入库实战

目录 前言 一、数据介绍 1、空间数据 2、属性表说明 3、QGIS数据预览 二、PostGIS空间数据库设计 1、空间表结构 三、Java空间入库 1、实体定义 2、数据操作Mapper 3、业务层实现 4、入库 5、数据入库验证 总结 前言 星垂平野阔,月涌大江流”“晴川历历…

.NET生成MongoDB中的主键ObjectId

前言 因为很多场景下我们需要在创建MongoDB数据的时候提前生成好主键为了返回或者通过主键查询创建的业务,像EF中我们可以生成Guid来,本来想着要不要实现一套MongoDB中ObjectId的,结果发现网上各种各样的实现都有,不过好在阅读C#…

机器人内部传感器阅读梳理及心得-速度传感器-模拟式速度传感器

速度传感器是机器人内部传感器之一,是闭环控制系统中不可缺少的重要组成部分,它用来测量机器人关节的运动速度。可以进行速度测量的传感器很多,如进行位置测量的传感器大多可同时获得速度的信息。但是应用最广泛、能直接得到代表转速的电压且…

基于stm32F103的座面声控台灯

1.基本内容: 设计一个放置在桌面使用的台灯,使用220v交流电供电。具备显示屏能够实时显示日期(年、月、日和星期),时间(小时、分钟、秒)和温度(摄氏度);能够通…

高校物品捐赠管理系统|基于springboot高校物品捐赠管理系统设计与实现(源码+数据库+文档)

高校物品捐赠管理系统目录 目录 基于springboot高校物品捐赠管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、捐赠信息管理 3、论坛信息管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算…

回归预测 | Matlab实现CPO-BiTCN-BiGRU冠豪猪算法优化双向时间卷积门控循环单元多变量回归预测

回归预测 | Matlab实现CPO-BiTCN-BiGRU冠豪猪算法优化双向时间卷积门控循环单元多变量回归预测 目录 回归预测 | Matlab实现CPO-BiTCN-BiGRU冠豪猪算法优化双向时间卷积门控循环单元多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-BiTCN-B…

比特币暴涨背后:通胀重现

作者:秦晋 这是一篇知名投资人安东尼庞普里亚诺(Anthony Pompliano)在2月27日写给投资者的一封信。 庞普里亚诺在信中将比特币暴涨归因于「通胀重现」。他表示,精明的投资者看到通胀将至,于是开始大手笔购买比特币。他…

【北京迅为】《iTOP-3588开发板网络环境配置手册》第2章 电脑、开发板直连交换机或路由器

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

[云原生] k8s之pod容器

一、pod的相关知识 1.1 Pod基础概念 Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理…

【Java程序设计】【C00320】基于Springboot的招生宣传管理系统(有论文)

基于Springboot的招生宣传管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的招生宣传管理系统,本系统有管理员以及招生人员二种角色; 前台:首页、专业介绍、师资力量、联…

Mysql数据库管理系统学习笔记1——sql语句,DBMS,数据库的分类

mysql是一种数据库管理系统(DBMS),data base manage system sql语句即为“structured query language”,结构化查询语言 数据库的分类:关系型数据库(RDBMS)与非关系型数据库 对于一些具有相同…

eltable 合计行添加tooltip

eltable 合计行添加tooltip 问题描述: eltable 合计行单元格内容过长会换行,需求要求合计行数据超长显示 … ,鼠标 hover 时显示提示信息。 解决方案:eltable合计行没有对外的修改接口,想法是 自己实现一个tooltip&a…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-33-处理https 安全问题或者非信任站点-上篇

1.简介 这一篇宏哥主要介绍playwright如何在IE、Chrome和Firefox三个浏览器上处理不信任证书的情况,我们知道,有些网站打开是弹窗,SSL证书不可信任,但是你可以点击高级选项,继续打开不安全的链接。举例来说&#xff0c…

java 通过 microsoft graph 调用outlook

废话不多说 一 官方文档 先看一下官方文档,https://learn.microsoft.com/zh-cn/graph/tutorials/java?contextoutlook%2Fcontext&tabsaad&tutorial-step1 其中的代码,可以通过地址下载:https://developer.microsoft.com/en-us/gra…

面试笔记系列五之MySql+Mybaits基础知识点整理及常见面试题

myibatis执行过程 1读取MyBatis的配置文件。 mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息。 2加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中…

Python实现时间序列分析进行平稳性检验(ADF和KPSS)和差分去趋势(adfuller和kpss算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 时间序列分析中的平稳性检验是评估一个时间序列是否具有稳定的均值和方差。在经济学、金融学以及其他诸…

单片机烧录方式 -- IAP、ISP和ICP

目录 背景 1 什么是ICP 2 什么是ISP 3 什么是IAP 4 总结 背景 对于51单片机,我们使用STC-ISP上位机软件通过串口进行程序的烧写;对于STM32系列单片机,我们既可以通过串口烧写程序,也能通过JLink或是STLink进行程序的烧写&am…

什么是生成式人工智能?

近年来,人工智能取得了重大进展,其中发展迅速的领域之一就是生成式人工智能。生成式人工智能是人工智能和深度学习的一个子领域,主要使用机器学习技 术根据现有数据训练算法和模型,生成诸如图像、文本、音乐、视频等新内容。 要更…

【lv14 day10内核模块参数传递和依赖】

一、模块传参 module_param(name,type,perm);//将指定的全局变量设置成模块参数 /* name:全局变量名 type: 使用符号 实际类型 传参方式 bool bool insmod xxx.ko 变量名0 或 1 invbool bool insmod xxx.ko 变量名0 或 1 charp char * insmod xxx.ko 变量名“字符串…

国产动漫|基于Springboot的国产动漫网站设计与实现(源码+数据库+文档)

国产动漫网站目录 目录 基于Springboot的国产动漫网站设计与实现 一、前言 二、系统功能设计 三、系统功能设计 1、用户信息管理 2、国漫先驱管理 3、国漫之最管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题…