Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~
🌱🌱个人主页:奋斗的明志
🌱🌱所属专栏:数据结构、LeetCode专栏
📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。
`
力扣练习题
一、根据二叉树创建字符串
1.题目
2.解析
利用前序遍历在递归的同时,有四种情况如下:
【第一、二种】
- 如果当前节点有两个孩子,那我们在递归时,需要在两个孩子的结果外都加上一层括号;
- 如果当前节点没有孩子,那我们不需要在节点后面加上任何括号;(在本题可以省略)
【第三种】
- 如果当前节点只有左孩子,那我们在递归时,只需要在左孩子的结果外加上一层括号,而不需要给右孩子加上任何括号;
【第四种】
- 如果当前节点只有右孩子,那我们在递归时,需要先加上一层空的括号 ‘()’ 表示左孩子为空,再对右孩子进行递归,并在结果外加上一层括号。
3.完整代码(深度优先遍历)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public String tree2str(TreeNode root) {
//创建 StringBuilder 存储字符串
StringBuilder sbu = new StringBuilder();
tree2strChild(root,sbu);
return sbu.toString();
}
public void tree2strChild(TreeNode root, StringBuilder sbu) {
//先判断根节点
if(root == null){
return;
}
//代码走到这,说明该树不为空
//把 结点的值添加
sbu.append(root.val);
//进行递归
//因为题目要求的是前序遍历 根左右
//接下来判断左子树
//左树可能为空 可能不为空
if(root.left != null){
//左子树不为空,先添加 一个 左小括号
sbu.append("(");
//开始递归左树
tree2strChild(root.left,sbu);
//左树递归完了 加一个右小括号
sbu.append(")");
}else{
if