# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def tree2str(self, root: Optional[TreeNode]) -> str:
if not root:
return ""
cur = root.val
left = self.tree2str(root.left)
right = self.tree2str(root.right)
if left and right:
return f"{cur}({left})({right})"
if right:
return f"{cur}()({right})"
if left:
return f"{cur}({left})"
return str(cur)# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def tree2str(self, root: Optional[TreeNode]) -> str:
res = []
def preorder(root):
if not root:
return
res.append("(")
res.append(str(root.val))
if not root.left and root.right:
res.append("()")
preorder(root.left)
preorder(root.right)
res.append(")")
preorder(root)
return "".join(res)[1:-1]# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def tree2str(self, root: Optional[TreeNode]) -> str:
if not root:
return ""
res = []
stack = []
last_visited = None
cur = root
while cur or stack:
if cur:
res.append(f"({cur.val}")
if not cur.left and cur.right:
res.append("()")
stack.append(cur)
cur = cur.left
else:
top = stack[-1]
if top.right and last_visited != top.right:
cur = top.right
else:
stack.pop()
res.append(")")
last_visited = top
return "".join(res)[1:-1]