专栏首页木又AI帮【leetcode刷题】T145-根据二叉树创建字符串

【leetcode刷题】T145-根据二叉树创建字符串

木又连续日更第3天(3/138)


木又的第145篇leetcode解题报告

二叉树类型第35篇解题报告

leetcode第606题:根据二叉树创建字符串

https://leetcode-cn.com/problems/construct-string-from-binary-tree


【题目】

你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。

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

示例 1:
输入: 二叉树: [1,2,3,4]
       1
     /   \
    2     3
   /    
  4     
输出: "1(2(4))(3)"
解释: 原本将是“1(2(4)())(3())”,
在你省略所有不必要的空括号对之后,
它将是“1(2(4))(3)”。
示例 2:
输入: 二叉树: [1,2,3,null,4]
       1
     /   \
    2     3
     \  
      4 
输出: "1(2()(4))(3)"
解释: 和第一个示例相似,
除了我们不能省略第一个对括号来中断输入和输出之间的一对一映射关系。

【思路】

使用前序遍历,访问根节点时,添加“(”和节点值;左孩子不为空,则递归遍历左孩子;右孩子不为空,则递归遍历右孩子;最后再添加")"。注意,左孩子为空,右孩子不为空时,需添加"()"。

【代码】

python版本

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def tree2str(self, t):
        """
        :type t: TreeNode
        :rtype: str
        """
        self.res = ''
        if not t:
            return ''
        self.traval(t)
        return self.res[1:-1]

    def traval(self, t):
        self.res += '(' + str(t.val)
        if t.left:
            self.traval(t.left)
        elif t.right:
            self.res += '()'
        if t.right:
            self.traval(t.right)
        self.res += ')'

C++版本

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    string tree2str(TreeNode* t) {
        if(!t)
            return "";
        string str="";
        traval(t, str);
        return str.substr(1, str.size()-2);
    }

    void traval(TreeNode* t, string& str){
        str.append("(");
        str.append(to_string(t->val));
        if(t->left)
            traval(t->left, str);
        else
            if(t->right)
                str.append("()");
        if(t->right)
            traval(t->right, str);
        str.append(")");
    }
};

本文分享自微信公众号 - 木又AI帮(gh_eaa31cab4b91),作者:木又

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【leetcode刷题】T147-两数之和 IV - 输入 BST

    https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst

    木又AI帮
  • 打卡群刷题总结0723——组合

    链接:https://leetcode-cn.com/problems/combinations

    木又AI帮
  • 【leetcode刷题】T142-二叉树的直径

    https://leetcode-cn.com/problems/diameter-of-binary-tree/

    木又AI帮
  • 服务器直接输入字符串代码执行方法测试

    我们在写代码的过程中时常要调试,但线上的服务器打包部署运行很费时,或者需要在线上查看数据,可以直接在服务器上输入需要执行的代码

    深雾
  • python的字典和集合

    dict类型可以说是python里模块的命名空间,实例的属性,函数的关键字参数都有其的参与。

    哒呵呵
  • xmake从入门到精通5:Android平台编译详解

    xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。

    ruki
  • 自欺欺人的使用 NSTimer 销毁

    用户1941540
  • 自欺欺人的使用 NSTimer 销毁

    用户1941540
  • 使用numpy构建多层感知机目标其他组件网络训练与测试

    import numpy as np 目标 使用numpy实现多层感知机的正向和反向传播 层次构建 全连接层 正向传播 正向传播的公式为:$Y = f(W \t...

    月见樽
  • kaggle 图像分类竞赛实战(一):数据集下载和清洗

    本文集以 Kaggle 网站真实竞赛《dogs-vs-cats-redux-kernels-edition》为主线,讲解如何使用深度学习技术解决图像分类问题。本...

    我是一条小青蛇

扫码关注云+社区

领取腾讯云代金券