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 theleftchild node of the parent first if it exists.
Example:
Input: "4(2(3)(1))(6(5))"
Output: return the tree root node representing the following tree:
4
/ \
2 6
/ \ /
3 1 5
Note:
There will only be'(',')','-'and'0'~'9'in the input string.
An empty tree is represented by""instead of"()".
2. Implementation
(1) Recursion
classSolution {int i;publicTreeNodestr2tree(String s) { i =0;returnbuildTree(s); }publicTreeNodebuildTree(String s) {StringBuilder num =newStringBuilder();while (i <s.length() && (s.charAt(i) =='-'||Character.isDigit(s.charAt(i)))) {num.append(s.charAt(i)); i++; }if (num.length() ==0) {returnnull; }TreeNode root =newTreeNode(Integer.parseInt(num.toString()));// Left SubTreeif (i <s.length() &&s.charAt(i) =='(') {// Skip '('++i;root.left=buildTree(s);// Skip ')'++i; }// Right SubTreeif (i <s.length() &&s.charAt(i) =='(') {++i;root.right=buildTree(s);++i; }return root; }}