
在二叉树的算法问题中,将二叉树结构转化为特定格式的字符串是经典的基础题型。本文将围绕 tree2str 问题展开,通过逐行拆解代码的方式,分析如何利用递归实现二叉树到字符串的转换,并解读其中关键的边界处理技巧。
一、根据二叉树创建字符串
链接直达:根据二叉树创建字符串

二、思路分析
要求将二叉树按照'根节点 (左子树)(右子树)'的格式转化为字符串,且有两个关键规则:若左子树为空但右子树非空,需保留左子树的空括号 ();若右子树为空,可直接省略其括号。
核心思路
前序递归遍历二叉树:先处理根节点,再递归处理左子树,最后递归处理右子树;同时在遍历过程中根据左右子树的存在情况,动态添加括号并处理边界条件,确保输出格式符合要求。

三、代码
1. 代码分析
1.1 主方法 tree2str
- 初始化
StringBuilder,用于高效拼接字符; - 调用递归辅助方法
tree2strChild处理节点; - 转换完成后返回结果。
1.2 递归辅助方法 tree2strChild
- 当 root 为空时,直接返回;
- 不为空,就将当前根节点的值拼接到 StringBuilder 中;
- 处理左子树:如果左子树不为空,先拼接
(, 递归处理左子树,再拼接);如果左子树为空,判断右子树,右子树如果也为空,直接返回。如果右子树不为空,拼接(); - 处理右子树:如果右子树不为空,重复上述左子树步骤,拼接括号然后递归再拼接括号;如果右子树为空,直接返回。
2. 代码展示
public String tree2str(TreeNode root) {
StringBuilder stringBuilder = new ();
tree2strChild(root, stringBuilder);
stringBuilder.toString();
}
{
(root == ) {
;
}
stringBuilder.append(root.val);
(root.left != ) {
stringBuilder.append();
tree2strChild(root.left, stringBuilder);
stringBuilder.append();
} {
(root.right == ) {
;
} {
stringBuilder.append();
}
}
(root.right != ) {
stringBuilder.append();
tree2strChild(root.right, stringBuilder);
stringBuilder.append();
} {
;
}
}


