zoukankan      html  css  js  c++  java
  • LeetCode 606. Construct String from Binary Tree

    You need to construct a string consists of parenthesis and integers from a binary tree with the preorder traversing way.

    The null node needs to be represented by empty parenthesis pair “()”. And you need to omit all the empty parenthesis pairs that don’t affect the one-to-one mapping relationship between the string and the original binary tree.

    Example 1:

    Input: Binary tree: [1,2,3,4]
           1
         /   
        2     3
       /    
      4     
    
    Output:  "1(2(4))(3)"
    
    Explanation: Originallay it needs to be "1(2(4)())(3()())", 
    but you need to omit all the unnecessary empty parenthesis pairs. 
    And it will be "1(2(4))(3)".
    

    Example 2:

    Input: Binary tree: [1,2,3,null,4]
           1
         /   
        2     3
           
          4 
    
    Output: "1(2()(4))(3)"
    
    Explanation: Almost the same as the first example, 
    except we can't omit the first parenthesis pair to break the one-to-one mapping relationship between the input and the outp
    
    /**
     * 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:
        void dfs(string &s,TreeNode*t){
    	     if(t==NULL)
    	     	return ;
             s+=to_string(t->val);
             s.insert(s.end(),1,'(');
             dfs(s,t->left);
             s.insert(s.end(),1,')');
             s.insert(s.end(),1,'(');
             dfs(s,t->right);
             s.insert(s.end(),1,')');
        }
          string tree2str(TreeNode* t) {
               string s;
               dfs(s,t);
               for(int i=0;i+4<=s.size();i++)//修改string,删除叶子节点的空左右儿子
               	if(s.substr(i,4)=="()()")
                   s.erase(i,4);
               for(int i=0;i+3<=s.size();i++)//修改string,删除节点的空右儿子
               	if(s.substr(i,3)==")()")
                   s.erase(i+1,2);    
               return s;
        }
    };
    
  • 相关阅读:
    NET6 如何使用Windows Service
    Delphi 设置窗体无标题栏和边框
    java MD5 加密 及对应的 oracle数据库中的MD5加密实现
    oracle 查看锁表进程和解锁
    创建dblink 及 同义词
    demjson python key没有引号的字符串如何转json
    Typescript Objects对象
    typescrip 数组、Map、对象方法
    mysql 日期 时间函数
    Typesrcipt日期时间
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/10074055.html
Copyright © 2011-2022 走看看