The only thing I want to note is that the time complexity for this algorithm is O(N^2) when the tree is a linked-list. It goes through `N`

characters in the first recursion, `N-1`

in the second recursion and `N-2`

, `N-3`

... in the following recursions which sum up to N^2 operations, totally.

```
class Solution(object):
def str2tree(self, s):
"""
:type s: str
:rtype: TreeNode
"""
if s:
cnt = start = 0
root = None
for i, c in enumerate(s):
if c == "(":
if not root and cnt == 0:
root = TreeNode(s[:i])
cnt += 1
if cnt == 1:
start = i + 1
if c == ")":
cnt -= 1
if cnt == 0:
if not root.left:
root.left = self.str2tree(s[start:i])
else:
root.right = self.str2tree(s[start:i])
return root if root else TreeNode(s)
```