返回

LeetCode 814. 二叉树剪枝:思路清晰,逐层递进

后端

导语
在当今软件开发领域,测试岗位已经成为不可或缺的一部分。然而,随着技术的不断进步,测试岗位也变得越来越卷。为了在激烈的竞争中脱颖而出,测试工程师不仅需要具备扎实的基本功,还要掌握一定程度的编程能力和脚本经验。

LeetCode 814. 二叉树剪枝

LeetCode 814. 二叉树剪枝 是一个经典的二叉树题目。题目给定一棵二叉树,要求剪掉所有不包含任何 1 的子树,并返回修剪后的二叉树。

解题思路

这道题的解题思路很简单,我们可以使用递归的方法来逐层遍历二叉树,并在遍历过程中判断每个子树是否包含 1。如果包含,则保留该子树;如果不包含,则剪掉该子树。

以下是详细的步骤:

  1. 如果当前节点为空,则直接返回。
  2. 如果当前节点的值为 1,则保留该节点及其左右子树。
  3. 如果当前节点的值为 0,则判断其左右子树是否包含 1。
  4. 如果左右子树都不包含 1,则剪掉该节点及其左右子树。
  5. 如果左右子树中至少有一个包含 1,则保留该节点及其包含 1 的子树,并剪掉另一个子树。

代码实现

def pruneTree(root):
    """
    :type root: TreeNode
    :rtype: TreeNode
    """
    if not root:
        return None

    # 如果当前节点的值为 1,则保留该节点及其左右子树
    if root.val == 1:
        root.left = pruneTree(root.left)
        root.right = pruneTree(root.right)
        return root

    # 如果当前节点的值为 0,则判断其左右子树是否包含 1
    else:
        left = pruneTree(root.left)
        right = pruneTree(root.right)

        # 如果左右子树都不包含 1,则剪掉该节点及其左右子树
        if not left and not right:
            return None

        # 如果左右子树中至少有一个包含 1,则保留该节点及其包含 1 的子树,并剪掉另一个子树
        else:
            root.left = left
            root.right = right
            return root

结语

希望这篇文章对您有所帮助。如果您有任何问题,请随时留言。