606. Construct String from Binary Tree

二叉树遍历,第一反应递归。

本身 not t 这个跳出条件很明显,需要多考虑的是:

The null node needs to be represented by empty parenthesis pair "()". And you need to omit all the empty parenthesis pairs that don't affect the one-to-one mapping relationship between the string and the original binary tree.

所以search左子树之后,要先确认是否符合「左子树空,右子树非空」的情况,符合的话直接添加()占位,再search右子树。而右子树不需要进行这个确认,因为它空也不需要占位。

# 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, t: TreeNode) -> str:
        if not t: return ""
        res = str(t.val)
        if t.left: res+="(" + self.tree2str(t.left) + ")"
        if not t.left and t.right: res+="()"    
        if t.right: res+="(" + self.tree2str(t.right) + ")"
        return res

要省空间的话可以用stack来写,O(n)的空间复杂度。

class Solution:
    def tree2str(self, t: TreeNode) -> str:
        if not t:
            return ""
        res = ""
        stack = [t]
        visited = []
        while stack:
            cur = stack[-1]
            if cur in visited:
                stack.pop()
                res += ")"
            else:
                visited.append(cur)
                res += "("+str(cur.val)
                if (not cur.left) and cur.right: res += "()"
                if cur.right: stack.append(cur.right)
                if cur.left: stack.append(cur.left)
        return res[1:len(res)-1]

反过来做的这道题要更麻烦点,虽然也用stack:536. Construct Binary Tree from String

Last updated

Was this helpful?