📅  最后修改于: 2023-12-03 14:57:28.274000             🧑  作者: Mango
给定一棵二叉树和一个数值 xor,计算从根节点到每个叶子节点路径上所有节点的异或和等于 xor 的路径数。
我们可以采用递归的方式解决这个问题。
def count_paths(root: TreeNode, xor: int) -> int:
if not root:
return 0
if not root.left and not root.right:
return 1 if xor == root.val else 0
left_count = count_paths(root.left, xor ^ root.val) if root.left and (xor ^ root.val) >= 0 else 0
right_count = count_paths(root.right, xor ^ root.val) if root.right and (xor ^ root.val) >= 0 else 0
return left_count + right_count
其中 TreeNode
表示二叉树节点的类型。
本算法采用递归实现,每个节点最多只会被访问一次,因此时间复杂度为 $O(n)$,其中 $n$ 表示二叉树节点数。
本算法采用递归实现,递归深度最多为二叉树高度,因此空间复杂度为 $O(h)$,其中 $h$ 表示二叉树高度。