📅  最后修改于: 2023-12-03 15:27:59.338000             🧑  作者: Mango
在二叉树中,从根节点到叶子节点经过的路径被称为对角线路径。本题的要求是计算从一个特定的节点开始,到由相同值的节点组成的叶子节点的对角线路径。
首先,我们需要遍历整棵二叉树并找到所有的叶子节点。然后,对于每个叶子节点进行如下处理:
最终,我们得到的结果就是所有符合要求的对角线路径。
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def findPath(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
paths = []
def dfs(node, curPath):
if not node:
return
curPath.append(node.val)
if not node.left and not node.right:
# 当前节点为叶子节点
if node.val == curPath[0]:
# 如果叶子节点的值与起始节点的值相同,
# 则将该节点加入到所在层级的节点列表中
level = len(curPath) - 1
if level >= len(paths):
paths.append([node.val])
else:
paths[level].append(node.val)
dfs(node.left, curPath)
dfs(node.right, curPath)
# 回溯
curPath.pop()
dfs(root, [])
res = []
for node_lst in paths:
i, j = 0, len(node_lst) - 1
while i < j:
# 找到连续若干个节点的值相同的路径
if node_lst[i] != node_lst[j]:
break
i += 1
j -= 1
if i >= j:
# 如果存在连续若干个节点的值相同,将该路径加入到结果中
path = [node_lst[k] for k in range(i)]
res.append(path)
return res