📖本篇内容:Leetcode每日一题 606. 根据二叉树创建字符串 DFS遍历二叉树的理解题
📑 文章专栏:leetcode每日一题《打卡日常》
📆 最近更新:2022 年 3 月 18日 Leetcode每日一题 2043. 简易银行系统 如果考察的是多线程安全 用户哈希存储 内存溢出 这题还是会和你想的那样简单么
⭐算法仓库:小付的算法之路——Alascanfu-algorithm.git.io
🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起
🙊写在前面🙊
题目
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
示例1:
输入: 二叉树: [1,2,3,4]
1
/ \
2 3
/
4
输出: "1(2(4))(3)"
解释: 原本将是“1(2(4)())(3())”,
在你省略所有不必要的空括号对之后,
它将是“1(2(4))(3)”。
示例2:
输入: 二叉树: [1,2,3,null,4]
1
/ \
2 3
\
4
输出: "1(2()(4))(3)"
解释: 和第一个示例相似,
除了我们不能省略第一个对括号来中断输入和输出之间的一对一映射关系。
📝思路📝
本题考查知识点
-
思路:题读明白了就容易了 难点在这个题的问题转换问题:
-
DFS深搜 遍历到底部的时候就可以跳出搜索了进行回溯搜索右子树,右子树存在时其左兄弟对应的空值节点也需要进行括号处理。
-
而右子树不为空时重复上述操作
⭐代码实现⭐
DFS深搜
class Solution {
public String tree2str(TreeNode root) {
StringBuilder res = new StringBuilder();
dfs(root,res);
return res.toString().substring(1,res.length()-1);
}
public void dfs(TreeNode node ,StringBuilder res){
if (node == null )return ;
res.append("(");
res.append(node.val);
// 这里满足的是如果当前节点不存在左子树,但是存在右子树则需要为其左子树加上 ()
if(node.left != null)dfs(node.left,res);
else if (node.right != null) res.append("()");
if(node.right != null)dfs(node.right,res);
res.append(")");
}
}
- 时间复杂度: O( 节 点 数 + 边 数 节点数+边数 节点数+边数)
- 空间复杂度: O( 节 点 数 节点数 节点数)
运行结果
DFS深搜

🙊写在最后🙊
2022- 3- 19今天小付打卡了哦~
美好的日出 美好的山河
都因有你存在 而璀璨 耀眼

本文详细解析了LeetCode第606题,如何使用深度优先搜索(DFS)将二叉树转化为由括号和整数组成的字符串。通过理解题目并利用DFS遍历,避免不必要的空括号对,从而实现一对一映射的转化。同时,文中还分享了作者的学习心得与代码实现,适合巩固基础和算法打卡。
375

被折叠的 条评论
为什么被折叠?



