📌  相关文章
📜  在给定的二叉搜索树中查找所有偶数路径(1)

📅  最后修改于: 2023-12-03 14:51:32.617000             🧑  作者: Mango

在给定的二叉搜索树中查找所有偶数路径

简介

本题要求在给定的二叉搜索树中查找所有偶数路径,即路径上节点的值之和为偶数的路径。

二叉搜索树是一种特殊的二叉树,它有一个重要的性质:对于任意一个节点,左子树中的所有节点都比它小,右子树中的所有节点都比它大。这个特点可以用来方便地对二叉搜索树进行查找和插入等操作。

解法
思路

寻找所有偶数路径的实现思路如下:

  1. 遍历树中所有的路径
  2. 对于每个路径,计算节点值之和
  3. 判断该节点值之和是否为偶数,如果是,将该路径加入结果
代码
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)$。