You need to construct a binary tree from a string consisting of parenthesis and integers.
The whole input represents a binary tree. It contains an integer followed by zero, one or two pairs of parenthesis. The integer represents the root's value and a pair of parenthesis contains a child binary tree with the same structure.
You always start to construct the left child node of the parent first if it exists.
Example 1:
**Input:** s = "4(2(3)(1))(6(5))"
**Output:** [4,2,6,3,1,5]
Example 2:
**Input:** s = "4(2(3)(1))(6(5)(7))"
**Output:** [4,2,6,3,1,5,7]
Example 3:
**Input:** s = "-4(2(3)(1))(6(5)(7))"
**Output:** [-4,2,6,3,1,5,7]
Constraints:
0 <= s.length <= 3 * 104
s consists of digits, '(', ')', and '-' only.
ac
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */classSolution {int i =0;publicTreeNodestr2tree(String s) {TreeNode root =null;int p = i;while (i <s.length() &&s.charAt(i) !='('&&s.charAt(i) !=')') i++; // get root valueString tmp =s.substring(p, i);if (tmp.length() !=0) { // some empty value like "()"int val =Integer.parseInt(tmp); root =newTreeNode(val); }if (i <s.length() &&s.charAt(i++) =='(') { // '(' means the start of a child node, careful about boundaryroot.left=str2tree(s);if (i <s.length() &&s.charAt(i++) =='(') {root.right=str2tree(s); i++; // when right child finish (not leaf), it's always like "))" } }return root; }}/*regard string as a queue, similar to #297 queue deserialize*/