根据二叉树创建字符串--力扣

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨

🐻强烈推荐优质专栏: 🍔🍟🌯C++的世界(持续更新中)

🐻推荐专栏1: 🍔🍟🌯C语言初阶

🐻推荐专栏2: 🍔🍟🌯C语言进阶

🔑个人信条: 🌵知行合一

🍉本篇简介:>:记录力扣题 根据二叉树创建字符串

目录

题目名称: 根据二叉树创建字符串

题目链接:传送门

题目难度:简单

题目介绍:

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

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

输入:root = 1,2,3,4

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

输入:root = 1,2,3,null,4

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

解题思路:

  1. 为了方便前序遍历的递归,我们创建一个子函数preorder.
  2. 二叉树的结点中,val的类型是int型,所以我们在将 val插入进str时,需要将数字转化为字符型.
  3. 确定打印括号:

综上,

打印左子树括号:

(1) 左存在, 或者 左不存在,但是右存在 或者 左右存在

打印右子树括号

(2)右存在就打印,不存在,不打印.

补充知识:
C++中的to_string函数是一个标准库函数,它可将数值、字符、布尔等转换为对应的字符串类型,并返回这个字符串值。

前序遍历:

按照 根 左子树 右子树的顺序访问.

代码实现:

cpp 复制代码
class Solution {
public:
    string tree2str(TreeNode* root) {
        string str;
        preorder(root,str);
        return str;
    }
    
    void preorder(TreeNode* root,string& str)	//前序遍历
    {
        if(root==nullptr)   return ;
        //先访问根
        string num=to_string(root->val);		//注意转化为字符型
        str+=num;	


		//其次访问左树
        //左树,左右一个存在就打印
        if(root->left||root->right)str+='(';
        preorder(root->left,str);
        if(root->left||root->right)str+=')';

		//最后访问右树
        //右存在才打印括号,即右不存在,则不打印
        if(root->right)str+='(';
        preorder(root->right,str);
        if(root->right)str+=')';
    }
};
相关推荐
ZhengEnCi3 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考3 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
夜不会漫长5 小时前
C++:红黑树
数据结构·算法
文丑颜不良啊5 小时前
LeetCode1661~1680题目解析
java·leetcode
AI备案指南-满满6 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor6 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David6 小时前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法
不一样的故事1266 小时前
NB/T 47013.8-2015 附录D 吸枪技术
人工智能·经验分享·算法
通问AI6 小时前
用 200 行 Python 给文档库做「上下文完整度」自检:四个可复算的检查项
算法
揽星河..7 小时前
【C语言】扫雷游戏
c语言·算法·游戏