LeCode:(606. 根据二叉树创建字符串)

题目链接
在这里插入图片描述

本体的难点:

  1. 什么时候去打印左右括号?
  2. 什么时候省略?

解题过程:通过观察看到,每次遍历结点之前,打印了一个左括号;遍历到叶子,叶子的左右也要打印出括号来(先不考虑省略)。然后每个结点遍历完,也要打印右括号,这样才能保证包起来。
先把这个过程写出来:

class Solution {
   
public:
    string tree2str(TreeNode* root) {
   
        if(root==nullptr)  //根为空,什么也不打印,因为进入这个结点之前,已经打印左括号了,再出来就会打印右括号。
        {
   
            return "";
        }
        string str = to_string(root->val);
        
        str += "(";
        str += tree2str(root->left);
        str+=")";

        str+="(";
        str+=tree2str(root->right);
        str+=")";
        return str;
    }
};

什么时候省略呢?

  • 左右孩子都为空 省略
  • 右孩子为空,左孩子不为空 省略
  • 左为空,右孩子不为空 不省略
 //左右都为空   省略
 //左为空,右不为空  不省略
 //右为空,左不为空  省略
class Solution {
   
public:
    string tree2str(TreeNode* root) {
   
        if(root==nullptr)
        {
   
            return "";
        }
        string str = to_string(root->val);

        //左不为空,必须进去!因为得打印左孩子。
        //左为空,右不为空,左括号不能省略,也得进去。
        if(root->left || root->right)
        {
   
            str += "(";
            str += tree2str(root->left);
            str+=")";
        }
        //右为空就省略了。
        if(root->right)
        {
   
            str+="(";
            str+=tree2str(root->right);
            str+=")";
        }

        return str;
    }
};

这个代码虽然不难,但是这个代码的结构很难想出来,希望读者能够好好思考这道题,左右括号,写在哪里,才能满足题目要求!

相关推荐

  1. 根据前,中(后,中)构建

    2024-01-07 16:40:03       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-07 16:40:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-07 16:40:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-07 16:40:03       87 阅读
  4. Python语言-面向对象

    2024-01-07 16:40:03       96 阅读

热门阅读

  1. 【SQL】加快SQL查询的九种优秀实践

    2024-01-07 16:40:03       59 阅读
  2. 38 调优kafka

    2024-01-07 16:40:03       62 阅读
  3. python贪吃蛇

    2024-01-07 16:40:03       57 阅读
  4. 前端算法之动态规划

    2024-01-07 16:40:03       69 阅读