📅  最后修改于: 2023-12-03 14:51:32.617000             🧑  作者: Mango
本题要求在给定的二叉搜索树中查找所有偶数路径,即路径上节点的值之和为偶数的路径。
二叉搜索树是一种特殊的二叉树,它有一个重要的性质:对于任意一个节点,左子树中的所有节点都比它小,右子树中的所有节点都比它大。这个特点可以用来方便地对二叉搜索树进行查找和插入等操作。
寻找所有偶数路径的实现思路如下:
class Solution:
def evenPaths(self, root: TreeNode) -> List[List[int]]:
def dfs(node, path, res):
# 当前节点为空,直接返回
if not node:
return
# 将当前节点加入路径
path.append(node.val)
# 到达叶子节点,计算节点值之和并判断是否为偶数
if not node.left and not node.right:
if sum(path) % 2 == 0:
res.append(path[:])
# 继续遍历左子树和右子树
dfs(node.left, path, res)
dfs(node.right, path, res)
# 回溯,将当前节点从路径中删除
path.pop()
res = []
dfs(root, [], res)
return res
遍历一遍树需要 $O(N)$ 的时间复杂度,其中 $N$ 是节点个数。对于每个节点,需要 $O(N)$ 的时间计算路径值之和,因此总时间复杂度是 $O(N^2)$。
最坏情况下,递归栈深度达到 $N$,因此空间复杂度是 $O(N)$。