【LeetCode经典题解】:二叉树转字符串递归解法的核心逻辑与代码解剖

【LeetCode经典题解】:二叉树转字符串递归解法的核心逻辑与代码解剖
在这里插入图片描述
🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:Java.数据结构
在这里插入图片描述


在这里插入图片描述


【前言】

在二叉树的算法问题中,将二叉树结构转化为特定格式的字符串是经典的基础题型,这一问题不仅考察对二叉树遍历的理解,更考验对递归逻辑和边界条件的处理能力。本文将围绕 tree2str 问题展开,通过逐行拆解代码的方式,分析如何利用递归实现二叉树到字符串的转换,并解读其中关键的边界处理技巧,帮助读者深入理解递归在树形结构问题中的应用思路。

文章目录:

一、根据二叉树创建字符串

链接直达:根据二叉树创建字符串


在这里插入图片描述

二、思路分析

要求将二叉树按照“根节点(左子树)(右子树)”的格式转化为字符串,且有两个关键规则:若左子树为空但右子树非空,需保留左子树的空括号 () ;若右子树为空,可直接省略其括号。
【核心思路】

前序递归遍历二叉树:先处理根节点,再递归处理左子树,最后递归处理右子树;
同时在遍历过程中根据左右子树的存在情况,动态添加括号并处理边界条件,确保输出格式符合要求。
在这里插入图片描述

三、代码

1.代码分析

1.1 主方法tree2str

  • 初始化StringBuilder,用于高效拼接字符;
  • 调用递归辅助方法tree2strChild处理节点;
  • 转换完成后返回

1.2 递归辅助方法tree2strChild

  • 当root为空时,直接返回;
  • 不为空,就将当前跟节点的值拼接到StringBuilder中;
  • 处理左子树:
如果左子树不为空,先拼接"(“,递归处理左子树,再拼接”)";如果左子树为空,判断右子树,右子树如果也为空,直接返回。如果右子树不为空,拼接"()";
  • 处理右子树:
如果右子树不为空,重复上述左子树步骤,拼接括号然后递归再拼接括号;如果右子树为空,直接返回

2.代码展示

publicStringtree2str(TreeNode root){StringBuilder stringBuilder =newStringBuilder();tree2strChild(root,stringBuilder);return stringBuilder.toString();}publicvoidtree2strChild(TreeNode root ,StringBuilder stringBuilder){if(root==null){return;} stringBuilder.append(root.val);//左子树if(root.left !=null){ stringBuilder.append("(");tree2strChild(root.left,stringBuilder); stringBuilder.append(")");}else{if(root.right==null){return;}else{ stringBuilder.append("()");}}//右子树if(root.right!=null){ stringBuilder.append("(");tree2strChild(root.right,stringBuilder); stringBuilder.append(")");}else{return;}}

【总结】

本文通过分析 tree2str 的递归实现代码,梳理了二叉树转字符串问题的核心解题逻辑:以前序递归遍历为基础,结合对左右子树存在性的边界判断,精准控制括号的添加时机与格式。该解法的关键在于对“左空右非空需保留左空括号”这一边界条件的处理,既体现了递归在树形结构遍历中的简洁性,也考验了对问题细节的把控能力。掌握这一思路后,面对类似的二叉树结构转化问题,也能快速梳理出递归遍历与边界处理的核心逻辑。
在这里插入图片描述

Read more

机器学习-聚类分析算法

机器学习-聚类分析算法

一、聚类分析的定义 聚类分析是一种无监督学习的统计分析方法。它的主要目的是将一个数据集中的样本(或观测值)按照某种相似性或距离度量划分成若干个类别(簇)。在聚类过程中,同一个簇内的样本具有较高的相似性,而不同簇之间的样本相似性较低。例如,在市场细分中,企业可以利用聚类分析将消费者划分为不同的群体,每个群体内的消费者在消费习惯、偏好等方面相似,而不同群体之间存在明显差异。 二、聚类和分类的区别 (一)学习方式 • 聚类 • 无监督学习:聚类分析不需要预先定义的类别标签。在聚类过程中,算法自己通过数据的内在结构来发现数据的分组模式。例如,在对文本数据进行聚类时,没有事先告诉算法每篇文本属于哪个主题类别,算法通过分析文本内容的相似性(如词语的共现频率等)来将文本分成不同的簇,每个簇可能对应一个主题。 • 分类 • 有监督学习:分类任务需要有标记的训练数据。这些数据已经明确地标注了每个样本所属的类别。算法通过学习这些已标记数据的特征和类别之间的关系来构建分类模型。例如,在垃圾邮件识别中,训练数据包含已经被标记为“垃圾邮件”或“非垃圾邮件”的邮件样本。分类算法会根据这些标记好的

By Ne0inhk
【数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点

【数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人等方向学习者 ❄️个人专栏:《C语言》《【初阶】数据结构与算法》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、删除链表中等于给定值 val 的所有节点 * 1.1题目 * 1.2 算法原理 * 1.3代码 * 二、反转链表 * 2.1题目 * 2.2 算法原理 * 2.3代码 * 三、链表中间节点 * 3.1题目 * 3.2 算法原理 * 3.3代码 * 总结与每日励志 前言 链表是 C 语言和数据结构学习的核心考点,也是编程入门绕不开的经典题型。本文聚焦删除指定值节点、

By Ne0inhk
❿⁄₁₄ ⟦ OSCP ⬖ 研记 ⟧ 密码攻击实践 ➱ 传递Net-NTLMv2哈希

❿⁄₁₄ ⟦ OSCP ⬖ 研记 ⟧ 密码攻击实践 ➱ 传递Net-NTLMv2哈希

郑重声明:本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。 🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论 | 保持连接💬 🌌 立即前往 👉晖度丨安全视界🚀 ▶ 信息收集  ▶ 漏洞检测 ▶ 初始立足点  ▶ 权限提升 ▶ 横向移动 ➢ 密码攻击 ➢ 传递Net-NTLMv2哈希🔥🔥🔥 ▶ 报告/分析 ▶ 教训/修复 目录 1.密码破解 1.1 破解Windows哈希实践 1.1.4 传递Net-NTLMv2哈希概述 1.1.4.1 攻击背景 1.1.4.2 攻击流程 1.1.

By Ne0inhk