返回

将二叉树字符串化:LeetCode 606 解决方案

前端

问题

给定一棵二叉树,你需要采用前序遍历的方式,将它转换成一个由括号和整数组成的字符串。空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间一一对应的括号。

思路:

我们可以使用递归和前序遍历来解决这个问题。前序遍历是一种树的遍历方式,它先访问根节点,然后再访问左子树和右子树。我们可以使用这种遍历方式来获取二叉树中节点的顺序,然后将它们转换为字符串。

在将节点转换为字符串时,我们需要考虑以下几点:

  • 如果节点为空,则将其转换为一对空括号 "()"。
  • 如果节点不为空,则将其转换为一个字符串,该字符串包含节点的值、左子树的字符串和右子树的字符串。
  • 在将左子树和右子树的字符串连接到节点值时,我们需要使用括号将它们括起来。

算法步骤:

  1. 如果根节点为空,则返回 "()"。
  2. 否则,创建一个字符串来存储节点值。
  3. 将左子树的字符串连接到节点值。
  4. 将右子树的字符串连接到节点值。
  5. 返回节点值字符串。

复杂度分析:

  • 时间复杂度:O(n),其中 n 是二叉树中的节点数。这是因为我们必须访问每个节点一次。
  • 空间复杂度:O(n),这是因为我们必须在递归调用中存储每个节点的字符串。

Python 示例:

def tree2str(root):
    """
    将二叉树转换为字符串。

    :param root: 二叉树的根节点。
    :return: 一个由括号和整数组成的字符串。
    """
    if not root:
        return "()"

    result = str(root.val)

    if not root.left and not root.right:
        return result

    if not root.right:
        result += "(" + tree2str(root.left) + ")"
    else:
        result += "(" + tree2str(root.left) + ")(" + tree2str(root.right) + ")"

    return result


# 测试代码
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

print(tree2str(root))  # 输出:"(1(2(4)(5))(3))"

结论:

这篇文章讨论了如何使用递归和前序遍历将二叉树转换为由括号和整数组成的字符串。我们讨论了空节点的处理方法以及如何使用前序遍历来组织树中的节点。该算法的复杂度为 O(n),其中 n 是二叉树中的节点数。最后,我们提供了一个 Python 示例,以便您可以看到该算法在实践中的工作原理。