前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【leetcode刷题】T145-根据二叉树创建字符串

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

作者头像
木又AI帮
发布2019-08-22 10:12:37
4500
发布2019-08-22 10:12:37
举报
文章被收录于专栏:木又AI帮木又AI帮木又AI帮

木又连续日更第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(")");
    }
};
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木又AI帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档