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:
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"()"
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { private int start = 0; public TreeNode str2tree(String s) { if (s == null || s.length() == 0) { return null; } return str2treeHelper(s); } private TreeNode str2treeHelper(String s) { if (start >= s.length()) { return null; } // parse int // boolean neg = false; if (s.charAt(start) == '-') { neg = true; start++; } int num = 0; while (start < s.length() && Character.isDigit(s.charAt(start))) { int digit = Character.getNumericValue(s.charAt(start)); num = num * 10 + digit; start++; } if (neg) { num = -num; } TreeNode root = new TreeNode(num); if (start >= s.length()) { return root; } // go to left child // if (start < s.length() && s.charAt(start) == '(') { start++; root.left = str2treeHelper(s); } if (start < s.length() && s.charAt(start) == ')') { start++; return root; } // go to the right child // if (start < s.length() && s.charAt(start) == '(') { start++; root.right = str2treeHelper(s); } if (start < s.length() && s.charAt(start) == ')') { start++; return root; } return root; } }
No comments:
Post a Comment