根据二叉树创建字符串

题目: 给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。

空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。

示例 1:

复制代码

示例 2:

复制代码

提示:

  • 树中节点的数目范围是 [1, 104]
  • -1000 <= Node.val <= 1000

前序遍历(Preorder Traversal 亦称先序遍历)------访问根结点--->根的左子树--->根的右子树

心态备注:读题目的第一遍,除了前序遍历知道外,啥也没懂,跟没读一样,无语,再看输入输出,(⇀‸↼‶)这在干啥啊!

切入正题,谈谈对题目的理解

对示例1的理解如下图

前序遍历这棵树出现的需要注意的情况时:

1.左边为空,右边也为空,字符串stringBuilder拼接 ')'

2.左边不为空,右边为空,字符串stringBuilder拼接 ')'

对示例2的理解如下图

前序遍历这棵树出现的需要注意的情况时:

左边为空,右边不为空时,字符串stringBuilder拼接 '()'

代码

java 复制代码
public class Solution {
    public String tree2str(TreeNode root) {
        if (root == null) {
            return null;
        }
        StringBuilder stringBuilder = new StringBuilder();
        tree2strChild(root, stringBuilder);
        return stringBuilder.toString();
    }

    public void tree2strChild(TreeNode root, StringBuilder stringBuilder) {
        if (root == null) {
            return;
        }
        stringBuilder.append(root.val);//不为null时,拼接该节点的存储数据
        //递归左树
        if (root.left != null) {
            stringBuilder.append("(");//左边不为空(null),凭接"("
            tree2strChild(root.left, stringBuilder);//再以前序遍历的方式递归左树
            stringBuilder.append(")");//左树递归完了,开始回退,凭接")"
        } else {
            //左边为空的情况,对右边进行判断
            //1.右边不为空
            //2.右边为空
            //开始讨论
            if (root.right != null) {//左边为空,右边不为空,拼接"()"
                stringBuilder.append("()");
            } else {//左边为空,右边为空,什么也不做,递归开始返回
                return;
            }
        }

        //递归右树
        if(root.right==null){
            return;//什么也不做,递归开始回退
        }else {
            stringBuilder.append("(");//右边不为空(null),凭接"("
            tree2strChild(root.right,stringBuilder);//再以前序遍历的方式递归右树
            stringBuilder.append(")");//右树递归完了,开始回退,凭接")"
        }
    }
}

运行结果

注:该题递归思想有点难以理解,多想想,或者多刷点题

题目链接:

https://leetcode.cn/problems/construct-string-from-binary-tree/submissions/457036963/

完结撒花

相关推荐
wabs6664 小时前
关于贪心算法的思考
算法·贪心算法
社交怪人5 小时前
【判断大小】信息学奥赛一本通C语言解法(题号1043)
算法
许彰午5 小时前
14_Java泛型完全指南
java·windows·python
Snasph5 小时前
GNU Make 用户手册(中文版)
服务器·算法·gnu
智慧物业老杨5 小时前
司法绿色通道下的物业纠纷数智化解决方案——基于“三优先“机制的全流程技术落地实践
java·django
2601_961194025 小时前
2026初级会计实务公式总结大全|计算题公式手册PDF
java·spring·eclipse·pdf·tomcat·hibernate
做个文艺程序员5 小时前
第1篇:K8s 核心概念精讲:Pod、Deployment、Service 与 Namespace——Java 开发者快速上手指南
java·云原生·容器·kubernetes·容器编排
江澎涌5 小时前
拆解与 AI 的一次对话
人工智能·算法·程序员
sheeta19986 小时前
LeetCode 每日一题笔记 日期:2026.06.02 题目:3635. 最早完成陆地和水上游乐设施的时间 II
笔记·算法·leetcode
Lsk_Smion6 小时前
力扣实训 _ [102].层序遍历--前序--后续_递归与非递归的实现
数据结构·算法·leetcode