🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻强烈推荐优质专栏: 🍔🍟🌯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)"
解释:和第一个示例类似,但是无法省略第一个空括号对,否则会破坏输入与输出一一映射的关系。
解题思路:
- 为了方便前序遍历的递归,我们创建一个子函数
preorder
. - 二叉树的结点中,
val
的类型是int型,所以我们在将val
插入进str
时,需要将数字转化为字符型. - 确定打印括号:
综上,
打印左子树括号:
(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+=')';
}
};