# Definition for a binary tree node.
class Solution:
def traversal(self, cur, path, result):
path.append(cur.val) # 中
if not cur.left and not cur.right: # 到达叶子节点
sPath = '->'.join(map(str, path))
result.append(sPath)
return
if cur.left: # 左
self.traversal(cur.left, path, result)
path.pop() # 回溯
if cur.right: # 右
self.traversal(cur.right, path, result)
path.pop() # 回溯
def binaryTreePaths(self, root):
result = []
path = []
if not root:
return result
self.traversal(root, path, result)
return result
代码来自代码思想录,具体细节见此网页
这段代码定义了一个用于遍历二叉树并找到从根节点到所有叶子节点路径的类 Solution
。下面是代码的逐步解释:
-
节点定义:这段代码假设已存在一个二叉树节点的类,通常结构为
TreeNode
,包含val
(节点值)、left
(左子节点)和right
(右子节点)属性。 -
traversal 方法:这个递归方法用于遍历树:
cur
参数是当前节点,path
是从根到当前节点的值的列表,result
存储所有路径的最终结果。- 把当前节点值
cur.val
添加到path
列表中。 - 判断当前节点是否是叶子节点(左右子节点都为
None
)。如果是,则通过'->'
将path
列表中的值连接成一个字符串sPath
,并将其添加到result
列表中。 - 如果当前节点有左子节点,则递归调用
traversal
方法处理左子树,并在返回后使用path.pop()
回溯,移除当前节点的值以便继续探访其他路径。 - 同样,如果当前节点有右子节点,执行相同的处理。
-
binaryTreePaths 方法:这是主要的接口方法:
- 创建一个空列表
result
用于保存结果路径,一个空列表path
用于跟踪路径。 - 如果根节点
root
为空,返回空的result
。 - 调用
traversal
方法开始遍历,从根节点开始,最终返回所有路径的列表result
。
- 创建一个空列表
总结:这个类通过深度优先搜索(DFS)算法遍历二叉树,找到所有从根到叶子节点的路径,并以字符串形式返回这些路径。