leetcode-606. Construct String from Binary Tree

来源:互联网 发布:上海淘宝客服招聘 编辑:程序博客网 时间:2024/06/05 08:23

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 out


题解:

肯定首先想到的是先序遍历二叉树,主要就是()和val的值怎么组织。

自己也没弄清楚,后来看的solution,想把思路梳理一遍。


首先对比实例中给出的两个二叉树和对应的结果,可以发现,在没有左子树和没有右子树的两种情况,是两种不同的方式,在没有左子树时,是需要添加一个()的,而没有右子树的情况下,是不需要的。


第一种递归写法:

所以一共就有如下几种情况(默认情况下没有左子树或者没有右子树都添加(),把没有右子树单独处理):

  1. t 为 null,返回“”。这是收敛条件
  2. t.left 和 t.right 都为 null,这是要返回 t.val + ""  (是为了返回String格式)
  3. t.left != null 但是 t.right == null,这时,要返回 t.val + "(" + tree2str(t.left) + ")"。不考虑右子树
  4. 默认情况:返回  t.val + "(" + tree2str(t.left) + ")" + "(" + tree2str(t.right) + ")";

class Solution {    public String tree2str(TreeNode t) {        if (t == null) return "";        if (t.left == null && t.right == null) return t.val+"";        if (t.right == null) return t.val + "(" + tree2str(t.left) + ")";        return t.val + "(" + tree2str(t.left) + ")" + "(" + tree2str(t.right) + ")";    }}


第二种使用stack

这种的默认处理方式是都按照"(" + t.val + ")"来处理,遇到左子树为空但是右子树不为空的情况单独处理(额外添加"()")。然后第一个节点和最后一个节点的"()"被舍弃.

使用Stack和set来记录是否遍历过该结点,以确定添加 "("  还是  “)” 

其中先添加right,再添加left,因为Stack为先进后出


阅读全文
0 0
原创粉丝点击