当前位置: 首页 > news >正文

根据二叉树创建字符串

一:题目

解释:

对题目的解析

二:思路

①先写一个前序遍历出来

解释:

测试结果来看 我们的前序遍历是成功的

②:再进行括号的插入

括号可以省略,那省略的要求是什么?

一个节点 左右孩子都为空 则两个空括号都省略

一个节点 左孩子为空 右孩子不为空 则左孩子的空括号不能省略 否则无法区分到底谁为空

一个节点 左孩子不为空 右孩子为空 则右孩子的空括号能省略

三:解题代码

class Solution {
public:
    string tree2str(TreeNode* root) {
        
        if(root == nullptr)
        return "";

        string ret = to_string(root->val);


        if(root->left!=nullptr || root->right!=nullptr)
        {
            ret += '(';
            ret += tree2str(root->left);
            ret += ')';
        }
       
        if(root->right!=nullptr)
        {
            ret += '(';
            ret+=tree2str(root->right);
            ret += ')';
        }
       
        return ret;
        
    }
};

解释:

if(root->left!=nullptr || root->right!=nullptr)

通过此判断,代表左孩子的括号不能省略,那什么情况左孩子的括号才不能省略呢 ?

①:只有左子节点 → 条件 true  左孩子本身就需要括号

②:只有右子节点 → 条件 true  为了避免歧义 左孩子需要括号

③:左右子节点都有 → 条件 true  由于操作符的特性,④其实就是①的情况

这几种情况,的确左孩子的括号不能省略

if(root->right!=nullptr)

右孩子的括号不能省略的情况就一种 右孩子存在则不能省略

注意:

该题目所给的函数的返回值是string ,所以在递归的过程中,遇到空节点,返回的是"",一个空字符串

四:对题目的质疑

原题的示例1的解释如下:

其实这是错的 应该是博主的在4的后面再加两个括号,因为你的3后面都有两个空括号代表其左右孩子为空 4也应该加两个空括号

http://www.dtcms.com/a/99041.html

相关文章:

  • Linux的进程优先级调度学习笔记
  • 智慧运维平台:赋能未来,开启高效运维新时代
  • React 中props的不可变性,如何在组件中处理需要修改props的情况?
  • 每日一题 MySQL基础知识----(三)
  • 饮食 “妙方”,助力进行性核上性麻痹调养
  • 学校智慧路灯的主要功能有哪些?
  • Python第六章19:函数的多种参数类型对比
  • 【嵌入式学习3】零散知识点
  • 【C++篇】类与对象(上篇):从面向过程到面向对象的跨越
  • 【8】递归之经典题型总结
  • Redis6数据结构之String类型
  • DeepSeek本地部署(linux)
  • 零基础驯服GitHub Pages
  • Linux进程管理之子进程的创建(fork函数)、子进程与线程的区别、fork函数的简单使用例子、子进程的典型应用场景、父进程等待子进程结束后自己再结束
  • Elasticsearch 高级
  • 分库分表策略
  • Flutter:切换账号功能记录
  • 【算法】动态规划:背包问题
  • HTTP---基础知识
  • python实现股票数据可视化
  • 【电子通识】案例:为什么电子产品制造过程中使用马克笔在FFC/FPC连接器打点进行标记
  • 去噪算法大比拼
  • 手撕string
  • 【C#】ForEach vs foreach
  • swift-7-汇编分析闭包本质
  • 蓝桥杯省赛 棋盘 3533 二维差分+二维前缀和
  • Ruoyi-Vue拆解:优雅实现Vue页面过渡动画
  • 消息队列篇--通信协议篇--SSL/TLS协议
  • 【教学类-58-16】黑白三角拼图14——黑白三角图连接部分的白线(2*2宫格)
  • AI大模型底层技术——Multi-LoRA Combination Methods