📅  最后修改于: 2023-12-03 14:54:27.602000             🧑  作者: Mango
给定一个二叉树和一个整数K,打印二叉树的所有路径,使得每条路径中的最大元素大于或等于 K。
此题需要利用回溯法对树进行遍历。具体步骤如下:
定义空列表 path
用于存储遍历路径,定义空列表 res
用于存储结果。
从根节点开始遍历,将根节点加入 path
。
递归遍历左子树,将左子节点加入 path
,并更新最大值。
递归遍历右子树,将右子节点加入 path
,并更新最大值。
若当前节点为叶子节点,判断当前路径的最大值是否大于或等于 K,若是,则将 path
添加到 res
中。
回溯操作,将当前节点从 path
中删除,返回到父节点,继续遍历。
遍历完成后,返回 res
。
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def findPaths(self, root: TreeNode, K: int) -> List[List[int]]:
res = []
path = []
if not root:
return res
def dfs(root, path, max_value):
if not root:
return
path.append(root.val)
max_value = max(max_value, root.val) # 更新最大值
if not root.left and not root.right: # 判断是否为叶子节点
if max_value >= K:
res.append(path[:])
else:
dfs(root.left, path, max_value)
dfs(root.right, path, max_value)
path.pop() # 回溯操作,将当前节点从路径中删除
dfs(root, path, root.val)
return res