小白水平理解面试经典题目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字符串中。 小美:小伙子,可以啊,这不仅进行了解题,阅读理解也有俩下子!不过电影票要你买单哦。 小白:没问题,谁叫为了"真爱"呢。 ![在这里插入图片描述](https://file.jishuzhan.net/article/1763136806905188354/6bd64d5872bccc56dbcfe14d9380bbff.webp) ### 真正面试环节 面试官:你可以解答这道"从二叉树构造字符串"的题目吗,来看看你对树结构的理解。 小白:嘿嘿,这不巧了么这不是。 ![在这里插入图片描述](https://file.jishuzhan.net/article/1763136806905188354/38ddda07593c48178d23d5a142e3d92b.webp) ```java 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 啊! ![在这里插入图片描述](https://file.jishuzhan.net/article/1763136806905188354/f93d2bc9b4452aea076396a6d1a3fb8e.webp) ```java 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 + " "); } ``` 小白:您好,面试官,这回可以了吧,我终于有钱请小美看电影了! ![在这里插入图片描述](https://file.jishuzhan.net/article/1763136806905188354/f19d7eb0b61560926c5f2313e611a594.webp) ============================================================================ 🍀🍀🍀🍀🍀🍀更多算法题解请看 [面试数据结构与算法总结分类+leetcode目录【基础版】](https://editor.csdn.net/md/?articleId=136017481) 编码道路漫漫,只要先看脚下的路,徐徐前进即可。

相关推荐
程序员-King.5 小时前
day158—回溯—全排列(LeetCode-46)
算法·leetcode·深度优先·回溯·递归
月挽清风6 小时前
代码随想录第七天:
数据结构·c++·算法
小O的算法实验室6 小时前
2026年AEI SCI1区TOP,基于改进 IRRT*-D* 算法的森林火灾救援场景下直升机轨迹规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
小郭团队7 小时前
2_1_七段式SVPWM (经典算法)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·硬件架构·arm·dsp开发
充值修改昵称7 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
Deepoch7 小时前
Deepoc数学大模型:发动机行业的算法引擎
人工智能·算法·机器人·发动机·deepoc·发动机行业
浅念-8 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
Hcoco_me8 小时前
大模型面试题84:是否了解 OpenAI 提出的Clip,它和SigLip有什么区别?为什么SigLip效果更好?
人工智能·算法·机器学习·chatgpt·机器人
BHXDML9 小时前
第九章:EM 算法
人工智能·算法·机器学习
却道天凉_好个秋9 小时前
目标检测算法与原理(三):PyTorch实现迁移学习
pytorch·算法·目标检测