根据二叉树创建字符串

 

题目:给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。

空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。

 示例 1:

 

示例 2:

 

提示:

  • 树中节点的数目范围是 [1, 104]
  • -1000 <= Node.val <= 1000

前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点--->根的左子树--->根的右子树
心态备注:读题目的第一遍,除了前序遍历知道外,啥也没懂,跟没读一样,无语,再看输入输出,(⇀‸↼‶)这在干啥啊! 

切入正题,谈谈对题目的理解

对示例1的理解如下图

前序遍历这棵树出现的需要注意的情况时:

1.左边为空,右边也为空,字符串stringBuilder拼接 ')'

2.左边不为空,右边为空,字符串stringBuilder拼接 ')' 

对示例2的理解如下图 

 

前序遍历这棵树出现的需要注意的情况时:

左边为空,右边不为空时,字符串stringBuilder拼接 '()' 

代码

public class Solution {public String tree2str(TreeNode root) {if (root == null) {return null;}StringBuilder stringBuilder = new StringBuilder();tree2strChild(root, stringBuilder);return stringBuilder.toString();}public void tree2strChild(TreeNode root, StringBuilder stringBuilder) {if (root == null) {return;}stringBuilder.append(root.val);//不为null时,拼接该节点的存储数据//递归左树if (root.left != null) {stringBuilder.append("(");//左边不为空(null),凭接"("tree2strChild(root.left, stringBuilder);//再以前序遍历的方式递归左树stringBuilder.append(")");//左树递归完了,开始回退,凭接")"} else {//左边为空的情况,对右边进行判断//1.右边不为空//2.右边为空//开始讨论if (root.right != null) {//左边为空,右边不为空,拼接"()"stringBuilder.append("()");} else {//左边为空,右边为空,什么也不做,递归开始返回return;}}//递归右树if(root.right==null){return;//什么也不做,递归开始回退}else {stringBuilder.append("(");//右边不为空(null),凭接"("tree2strChild(root.right,stringBuilder);//再以前序遍历的方式递归右树stringBuilder.append(")");//右树递归完了,开始回退,凭接")"}}
}

运行结果

注:该题递归思想有点难以理解,多想想,或者多刷点题

题目链接: 

https://leetcode.cn/problems/construct-string-from-binary-tree/submissions/457036963/

完结撒花

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux查看GPU显卡/CPU内存/硬盘信息

显卡信息命令/CPU内存/硬盘 1.显卡2、CPU内存3、硬盘 1.显卡 nvidia-smi nvidia-smi&#xff08;显示一次当前GPU占用情况&#xff09; nvidia-smi -l&#xff08;每秒刷新一次并显示&#xff09; watch -n 5 nvidia-smi &#xff08;其中&#xff0c;5表示每隔6秒刷新一次终端…

达梦数据库(dm8) Centos7 高可用集群

国产数据库-达梦 一、环境详情二、Centos7 参数优化&#xff08;所有节点&#xff09;三、创建用户&#xff08;所有节点&#xff09;四、开始安装&#xff08;所有节点&#xff09;五、服务注册启动 当前安装&#xff1a;在指定版本环境下 测试&#xff0c;仅供参考 官网描述&…

Flutter:简单搞一个内容高亮

内容高亮并不陌生&#xff0c;特别是在搜索内容页面&#xff0c;可以说四处可见&#xff0c;就拿掘金这个应用而言&#xff0c;针对某一个关键字&#xff0c;我们搜索之后&#xff0c;与关键字相同的内容&#xff0c;则会高亮展示&#xff0c;如下图所示&#xff1a; 如上的效果…

完美解决Github提交PR后报错:File is not gofumpt-ed (gofumpt)

问题阐述 最近在Github上提交PR后&#xff0c;遇到了这么一个问题&#xff1a;golangci-lint运行失败&#xff0c;具体原因是File is not gofumpt-ed (gofumpt)。 名词解释 golangci-lint&#xff1a; golangci-lint 是Go语言社区中常用的代码质量检查工具&#xff0c;它可以…

C#,数值计算——抛物线插值与Brent方法(Parabolic Interpolation and Brent‘s Method)的计算方法与源程序

using System; namespace Legalsoft.Truffer { /// <summary> /// 抛物线插值与Brent方法 /// Parabolic Interpolation and Brents Method /// </summary> public class Brent : Bracketmethod { public double xmin { get; set…

数据统计与可视化的Dash应用程序

在数据分析和可视化领域&#xff0c;Dash是一个强大的工具&#xff0c;它结合了Python中的数据处理库&#xff08;如pandas&#xff09;和交互式可视化库&#xff08;如Plotly&#xff09;以及Web应用程序开发框架。本文将介绍如何使用Dash创建一个简单的数据统计和可视化应用程…

Mysql - 配置Mysql主从复制-keepalived高可用-读写分离集群

目录 高可用&#xff1a; 为什么需要高可用呢&#xff1f; 高可用的主要作用&#xff1a; keepalived是什么&#xff1f;它用在哪里&#xff1f; 什么是VRRP协议&#xff0c;它的作用是什么&#xff1f; 搭建一个基于keepalived的高可用Mysql主从复制读写分离集群 一、项…

HTML5的介绍和基本框架

目录 HTML5 HTML5介绍 HTML5的DOCTYPE声明 HTML5基本骨架 html标签 head标签 body标签 title标签 meta标签 在vscode中写出第一个小框架 HTML5 HTML5介绍 HTML5是用来描述网页的一种语言&#xff0c;被称为超文本标记语言。用HTML5编写的文件&#xff0c;后缀以.ht…

ubuntu网络管理

主机-ip&#xff0c;service—port 分别查看/etc/hosts&#xff0c;/etc/host.conf&#xff1b;/etc/services&#xff0c;/etc/resolv.conf&#xff1b; 内核更新——linux-image-generic 6.2.0-24.24 非常抱歉&#xff0c;我误解了你的问题。如果你想更新已安装的内核版本…

centos7安装erlang及rabbitMQ

下载前注意事项&#xff1a; 第一&#xff1a;自己的系统版本&#xff0c;centos中uname -a指令可以查看&#xff0c;el8&#xff0c;el7&#xff0c;rabbitMQ的包不一样&#xff01; 第二&#xff1a;根据rabbitMQ中erlang version找到想要下载rabbitMQ对应erlang版本&#x…

18----找出第一个只出现一次的字符(桶计数法/4种思路讲解)

题目描述 给定一个只包含小写字母的字符串&#xff0c;请你找到第一个仅出现一次的字符。如果没有&#xff0c;输出 no。 输入格式 一个字符串&#xff0c;长度小于 1100。 输出格式 输出第一个仅出现一次的字符&#xff0c;若没有则输出 no。 输入输出样例 输入 #1复制 abc 输…

Android Studio System.out.println()中文乱码

第一步&#xff1a; 打开studio64.exe.vmoptions加入-Dfile.encodingUTF-8 第二步&#xff1a; File-Settings-Editor-File Encodings 把所有的编码格式改为UTF-8 尝试跑一下代码&#xff0c;如果还不行&#xff0c;重启IDE 再试试。