【刷题日记】606. 根据二叉树创建字符串

简介: 本次刷题日记的第 7 篇,力扣题为:606. 根据二叉树创建字符串 ,简单

【刷题日记】606. 根据二叉树创建字符串

本次刷题日记的第 7 篇,力扣题为:606. 根据二叉树创建字符串简单

一、题目描述:

image.png

朋友们,看到这个题什么什么感觉?

又是一个二叉树的题,本次要使用前序遍历,来遍历这一棵树,且本次的树是二叉树

看了一下题目,只是在之前的树的题目上多加了一部分添加括号的逻辑而已,不会有啥特别的骚操作

二、思路分析:

1、这道题考察了什么思想?你的思路是什么?

查看这个题,我们可以来分析一下,这个题需要考虑哪些情况呢?

  • 这个棵树是二叉树,且需要我们用前序遍历的方式来处理,前序遍历的遍历顺序是 根左右 , 先遍历根节点,再遍历左节点,最后遍历右节点,相信这个 xdm 已经很熟悉了
  • 在我们遍历树的过程中,整个树的根不需要加括号,但是其他的子树涉及的每一个节点都是需要加括号的
  • 对于添加括号,我们还需要明确,子树的右子为空的时候,我们是可以忽略括号的,因为他不影响字符串与原始二叉树之间的一对一映射关系
    例如二叉树遍历结果1(2(4))(3) 我们就知道 4 是 2 的左子树,2 是 1 的左子树,3 是 1 的右子树 ,我们就不需要写成 1(2(4)())(3)
  • 如果子树中,左子是空,右子是有值的,那么 左子的这个空括号是不能省略的,如果省略了,那么就会影响字符串和原始二叉树的一一映射关系
    例如二叉树遍历结果1(2()(4))(3)  , 我们就知道 4 是 2 的右子树,如果去掉了 2 后面的括号,则表达的意思是  4 是 2 的左子树了,这样就不符合题意了

根据以上情况,我们可以来画个简图来用示例推理一下:

例如,示例 1 :二叉树: [1,2,3,4]

image.png

通过上图,我们可以知道,分别以 1 2 4 3 为根节点遍历的时候,我们可以根据如上的分析的规则来进行做括号的增添,大体逻辑是这样的:

  • 如果该节点没有子树,则直接将本身的值加入到结果集
  • 如果该节点左子为空,右子有值,那么左子的空括号要画,右子有值,那么括号也要画上
  • 如果节点的左子有值,右子也有值,那么左右子的括号都要画
  • 如果节点的左子有值,右子为空则画左子的括号,右子的括号需要省略

2、尝试编码

根据上述的逻辑和推演,其实思想很简单,就是根据遍历到的每一个节点,去做如上逻辑的校验即可,按照逻辑来添加括号即可

编码如下:

func tree2str(root *TreeNode) string {
    switch {
    case root == nil:
        return ""
    case root.Left == nil && root.Right == nil:
        return strconv.Itoa(root.Val)
    case root.Right == nil:
        return fmt.Sprintf("%d(%s)", root.Val, tree2str(root.Left))
    default:
        return fmt.Sprintf("%d(%s)(%s)", root.Val, tree2str(root.Left), tree2str(root.Right))
    }
}

可以看出,我们的代码**,就是将上述我们的思想翻译过来而已**,所以,我们做题的时候,需要先想清楚,弄明白整个流程和思路,那么编码的时候,那就是一个翻译的过程,重点是思想

四、总结:

本题的时间复杂度和空间复杂度都是 O(n) ,主要是需要考虑到每一个种情况之后,这个题就很快实现了

原题地址:606. 根据二叉树创建字符串

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
Prometheus Cloud Native 算法
alertmanager集群莫名发送resolve消息的问题探究
alertmanager集群莫名发送resolve消息的问题探究
219 3
|
数据采集 机器学习/深度学习 数据挖掘
Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战
Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战
|
前端开发 JavaScript 程序员
程序员教你用代码制作圣诞树,正好圣诞节拿去送给女神给她个惊喜
使用HTML、CSS和JavaScript实现了一个圣诞树效果,包括一个闪烁的圣诞树和一个动态的光斑。代码包含一个<div>元素作为遮罩,一个<canvas>元素绘制星星动画,以及一个SVG元素绘制圣诞树。页面还包含一个提示用户先点赞再观看的提示。此效果适用于任何浏览器,推荐使用谷歌浏览器。提供了一段HTML代码,可以直接复制粘贴到文件中并以.html格式打开查看效果。
360 0
|
11月前
|
存储 程序员 索引
列表都有哪些自定义方法,它们是怎么实现的?
列表都有哪些自定义方法,它们是怎么实现的?
78 9
|
机器学习/深度学习 人工智能 物联网
快速玩转 Llama2 机器学习 PAI 最佳实践(一)低代码 Lora 微调及部署
采用阿里云机器学习平台PAI-快速开始模块针对 Llama-2-7b-chat 进行开发。PAI-快速开始支持基于开源模型的低代码训练、布署和推理全流程,适合想要快速开箱体验预训练模型的开发者。
69251 59
|
分布式计算 并行计算 算法
【高并发】什么是ForkJoin?看这一篇就够了!
在JDK中,提供了这样一种功能:它能够将复杂的逻辑拆分成一个个简单的逻辑来并行执行,待每个并行执行的逻辑执行完成后,再将各个结果进行汇总,得出最终的结果数据。有点像Hadoop中的MapReduce。 ForkJoin是由JDK1.7之后提供的多线程并发处理框架。ForkJoin框架的基本思想是分而治之。什么是分而治之?分而治之就是将一个复杂的计算,按照设定的阈值分解成多个计算,然后将各个计算结果进行汇总。相应的,ForkJoin将复杂的计算当做一个任务,而分解的多个计算则是当做一个个子任务来并行执行。
6836 0
【高并发】什么是ForkJoin?看这一篇就够了!
|
XML 存储 JavaScript
JavaScript 中的宿主对象和原生对象:开发者必知的基础知识(上)
JavaScript 中的宿主对象和原生对象:开发者必知的基础知识(上)
JavaScript 中的宿主对象和原生对象:开发者必知的基础知识(上)
|
机器学习/深度学习 JSON 数据挖掘
如何使用API数据接口给自己创造收益
使用API数据接口创造收益的方法有很多,以下是一些常见的方法,并附有代码示例:
|
弹性计算 负载均衡 对象存储
阿里云免费云服务器领取教程
阿里云免费云服务器领取教程,阿里云免费服务器领取,个人和企业用户均可以申请,个人免费服务器1核2GB 每月750小时,企业u1服务器2核8GB免费使用3个月,阿里云百科分享阿里云免费服务器申请入口、个人和企业免费配置、申请资格条件及云服务器免费使用时长
865 0