📅  最后修改于: 2023-12-03 15:36:43.314000             🧑  作者: Mango
二叉树的修剪操作指的是对于给定的二叉树,去除其任何仅包含 0 的子树(即叶子节点的值为 0 且无子节点)。这个操作可以使得二叉树更节省空间,减少不必要的计算。
对于每个节点,我们需要进行如下操作:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def pruneTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
if not root:
return None
# 对左右子节点进行递归操作
root.left = self.pruneTree(root.left)
root.right = self.pruneTree(root.right)
# 如果当前节点是叶子节点(即无子节点),并且其值为 0,则将其置为空,并返回空值。
if not root.left and not root.right and root.val == 0:
return None
# 最后,返回该节点。
return root
我们需要对二叉树的每个节点进行操作,因此时间复杂度为 $O(n)$,其中 $n$ 为二叉树的节点数。
在递归过程中,我们需要使用 $O(h)$ 的额外空间,其中 $h$ 为二叉树的高度。最坏情况下,二叉树退化为链表,此时 $h=n$,因此空间复杂度为 $O(n)$。