class Solution: def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]: res = [] path = []
def treverse(node): path.append(str(node.val))
if node.left == None and node.right == None: res.append("->".join(path)) if node.left: treverse(node.left) if node.right: treverse(node.right) path.pop() if root !=None: treverse(root) return res
BFS
层序遍历,队列中直接存储当前节点以及其对应的路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
class Solution: def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]: res = [] que = deque() if root != None: que.append((root, [str(root.val)])) while que: cur, path = que.popleft() if cur.left == None and cur.right == None: res.append("->".join(path)) if cur.left: que.append((cur.left, path + [str(cur.left.val)])) if cur.right: que.append((cur.right, path + [str(cur.right.val)])) return res
dfs 遍历该树,遇到左节点为叶子节点就记录其数值,否则遍历其子树。注意这里写成了 res = [0],不写 res=0 是因为在函数内部对某个变量赋值(如 res += …),Python 会默认把这个变量当作函数的局部变量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
class Solution: def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int: res = [0] # ✅ 使用 list 包装成可变对象
def dfs(node): if node.left: # 如果左孩子是叶子节点才加 if not node.left.left and not node.left.right: res[0] += node.left.val else: dfs(node.left) if node.right: dfs(node.right)
class Solution: def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool: que = deque()
if root: que.append((root, [root.val])) while que:
cur, path = que.popleft() if cur.left == None and cur.right == None: s = sum(path) if s == targetSum: return True if cur.left: que.append((cur.left, path + [cur.left.val])) if cur.right: que.append((cur.right, path + [cur.right.val])) return False