找出二叉树最长路径并输出该路径节点,生成代码
时间: 2024-10-29 11:19:42 浏览: 80
在二叉树中找到最长路径通常是指找到从根节点到叶子节点的最大路径长度和路径上的节点序列。这个问题可以看作是一个深度优先搜索(DFS)或广度优先搜索(BFS)的问题。这里我们提供一个Python代码示例,使用递归方法:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def longest_path(root):
if not root:
return 0, []
def dfs(node, path_len, max_path):
nonlocal max_path_len, max_path
if node.left is None and node.right is None: # 到达叶节点
if path_len + 1 > max_path_len:
max_path_len = path_len + 1
max_path = list(path) + [node.val]
else:
dfs(node.left, path_len + 1, max_path)
dfs(node.right, path_len + 1, max_path)
path.append(node.val) # 添加当前节点到路径
path.pop(0) # 回溯到上一层,移除已处理的父节点
path = []
max_path_len = 0
max_path = []
dfs(root, 0, max_path)
return max_path_len, max_path
# 使用示例
# 创建一个简单的二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
path_len, max_path = longest_path(root)
print(f"最长路径长度: {path_len}")
print("最长路径节点:", max_path)
```
这个代码首先定义了一个`TreeNode`类表示二叉树节点。`longest_path`函数采用深度优先搜索策略,记录当前路径长度,并在遇到叶子节点时更新最长路径。最后返回最长路径的长度和节点值组成的列表。
阅读全文
相关推荐



















