5. (简答题) 编写算法求给定二叉树中一条最长的路径,并输出此路径上各结点的值。
时间: 2024-10-21 14:12:22 浏览: 79
求解给定二叉树中最长路径的问题,可以采用深度优先搜索(DFS)或广度优先搜索(BFS)结合回溯策略来解决。这里我们以DFS为例:
1. 定义递归函数`longestPath(root)`,其中`root`是当前节点:
- 如果`root`为空,则返回空列表表示没有路径。
- 计算左子树和右子树的最长路径,分别存储为`leftPath`和`rightPath`。
- 比较左右子树的最长路径长度,取较大者作为当前路径长度`maxLen`。
- 若当前节点的值加上左右子树的最大路径长度大于`maxLen`,则更新`maxLen`并记录下路径,即当前节点加上最长子路径的结果。
- 返回`maxLen`作为整个树的最长路径长度,同时记录下这条最长路径的节点值。
2. 为了获取路径上的节点值,我们在递归过程中维护一个临时结果数组`pathValues`,当找到更长路径时,将新路径添加到`pathValues`。
以下是伪代码示例:
```python
def longestPath(root):
def dfs(node, path, maxLen, pathValues):
if not node:
return maxLen, pathValues
leftMax, leftPathValues = dfs(node.left, [], 0, [])
rightMax, rightPathValues = dfs(node.right, [], 0, [])
# 更新路径长度和路径值
currentMax = max(maxLen, leftMax + rightMax + node.val)
if currentMax > maxLen:
maxLen = currentMax
pathValues = [node.val] + leftPathValues + rightPathValues
return currentMax, pathValues
maxLen, pathValues = dfs(root, [], 0, [])
return maxLen, pathValues
```
阅读全文