返回
LeetCode 814. 二叉树剪枝:思路清晰,逐层递进
后端
2024-02-09 01:48:34
导语
在当今软件开发领域,测试岗位已经成为不可或缺的一部分。然而,随着技术的不断进步,测试岗位也变得越来越卷。为了在激烈的竞争中脱颖而出,测试工程师不仅需要具备扎实的基本功,还要掌握一定程度的编程能力和脚本经验。
LeetCode 814. 二叉树剪枝
LeetCode 814. 二叉树剪枝 是一个经典的二叉树题目。题目给定一棵二叉树,要求剪掉所有不包含任何 1 的子树,并返回修剪后的二叉树。
解题思路
这道题的解题思路很简单,我们可以使用递归的方法来逐层遍历二叉树,并在遍历过程中判断每个子树是否包含 1。如果包含,则保留该子树;如果不包含,则剪掉该子树。
以下是详细的步骤:
- 如果当前节点为空,则直接返回。
- 如果当前节点的值为 1,则保留该节点及其左右子树。
- 如果当前节点的值为 0,则判断其左右子树是否包含 1。
- 如果左右子树都不包含 1,则剪掉该节点及其左右子树。
- 如果左右子树中至少有一个包含 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
结语
希望这篇文章对您有所帮助。如果您有任何问题,请随时留言。