C++ 根据二叉树创建字符串 - 力扣(LeetCode)

news/2025/2/27 10:54:50

点击链接即可查看题目: 606. 根据二叉树创建字符串 - 力扣(LeetCode)

一、题目

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

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

示例 1:

输入:root = [1,2,3,4]
输出:"1(2(4))(3)"
解释:初步转化后得到 "1(2(4)())(3()())" ,但省略所有不必要的空括号对后,字符串应该是"1(2(4))(3)" 。

示例 2:

输入:root = [1,2,3,null,4]
输出:"1(2()(4))(3)"
解释:和第一个示例类似,但是无法省略第一个空括号对,否则会破坏输入与输出一一映射的关系。

二、解题思路以及代码 

        to_string()函数是将int转化为string 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    string tree2str(TreeNode* root) 
    {
        string s;
        if(nullptr == root)
            return s;
        
        s += to_string(root->val);
        
        //if(root->left || root->right)
        //也可以写成这样
        if(nullptr != root->left || nullptr !=root->right)
        {
            s += '(';
            s += tree2str(root->left);
            s += ')';
        }
        //if(root->right)
        //也可以写成这样
        if(nullptr != root->right)
        {
            s += '(';
            s += tree2str(root->right);
            s += ')';
        }
        return s;
    }
};

方法二可能更好理解 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    void Inorder(TreeNode*root,string& s)
    {
        if(nullptr == root)
            return;
        
        s += to_string(root->val);
        if(nullptr != root->left || nullptr !=root->right)
        {
            s += '(';
            Inorder(root->left,s);
            s += ')';
        }
        
        if(nullptr != root->right)
        {
            s += '(';
            Inorder(root->right,s);
            s += ')';
        }
    }
    string tree2str(TreeNode* root) 
    {
        string s;
        Inorder(root, s);
        return s;
    }
};

http://www.niftyadmin.cn/n/5869993.html

相关文章

(九)axios的使用

1、axios 的基本使用 1.1、简介 在 Web 开发的演进历程中,数据请求方式的变革至关重要。回溯早期,旧浏览器在向服务器请求数据时,存在严重弊端。由于返回的是整个页面数据,每次请求都会导致页面强制刷新,这不仅极大地…

VidSketch:具有扩散控制的手绘草图驱动视频生成

浙大提出的VidSketch是第一个能够仅通过任意数量的手绘草图和简单的文本提示来生成高质量视频动画的应用程序。该方法训练是在单个 RTX4090 GPU 上进行的,针对每个动作类别使用一个小型、高质量的数据集。VidSketch方法使所有用户都能使用简洁的文本提示和直观的手绘…

0x01 html和css

css 对于三种css使用方式&#xff1a; 第一种&#xff1a;行内样式 <span style"color: grey;">2024年05月15日 20:07</span>第二种&#xff1a;内部样式 <!DOCTYPE html> <html lang"en"> <head>...<style>span{…

论软件设计模式及其应用-软考

软件设计模式(Software Design Pattern)是一套被反复使用的、多数人知晓的代码设计经验的总结。使用设计模式是为了重用代码以提高编码效率、增加代代码可理解性、保证代码的可靠性。软件设计模式是软件开发中的最佳实践之一,它经常被开发人员在面向对象软件开发过程中所采用…

python-leetcode-划分字母区间

763. 划分字母区间 - 力扣&#xff08;LeetCode&#xff09; class Solution:def partitionLabels(self, s: str) -> List[int]:last_index {char: idx for idx, char in enumerate(s)}partitions []start end 0for i, char in enumerate(s):end max(end, last_index[c…

8、HTTP/1.0和HTTP/1.1的区别【高频】

第一个是 长连接&#xff1a; HTTP/1.0 默认 短连接&#xff0c;&#xff08;它也可以指定 Connection 首部字段的值为 Keep-Alive实现 长连接&#xff09;而HTTP/1.1 默认支持 长连接&#xff0c;HTTP/1.1是基于 TCP/IP协议的&#xff0c;创建一个TCP连接是需要经过三次握手的…

如何在netlify一键部署静态网站

1. 准备你的项目 确保你的静态网站文件&#xff08;如 HTML、CSS、JavaScript、图片等&#xff09;都在一个文件夹中。通常&#xff0c;项目结构如下&#xff1a; my-static-site/ ├── index.html ├── styles/ │ └── styles.css └── scripts/└── script.js…

前端px转为rem的自适应解决方案

1.前端项目安装&#xff1a;npm install postcss-pxtorem --save-dev 2.在项目根目录下新增postcss.config.js文件&#xff0c;文件内容如下&#xff1a; module.exports {plugins: {postcss-pxtorem: {rootValue: 16, // 1rem 16pxpropList: [*], // 转换所有属性selector…