运用栈 求二叉树T中第一条最长的路径长度,并输出此路径上各结点的值
时间: 2024-02-13 19:02:45 浏览: 68
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径
可以使用深度优先搜索(DFS)来求解二叉树T中第一条最长的路径长度,并输出此路径上各结点的值。具体步骤如下:
1. 定义一个栈S和一个变量max_len,初始值为0。
2. 从根节点开始,将其入栈S。
3. 当栈S非空时,弹出栈顶节点,并将其标记为已访问。
4. 遍历该节点的左右子节点,若子节点未被访问过,则将其入栈。
5. 若当前节点是叶子节点,则计算该叶子节点到根节点的距离,若大于max_len,则更新max_len,并记录该路径上各结点的值。
6. 重复步骤3-5,直到栈S为空。
以下是Python代码实现:
```python
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def dfs(root):
stack = [(root, [root.val])] # 栈中保存节点和该节点到根节点路径上的值
max_len = 0
max_path = []
while stack:
node, path = stack.pop()
if not node.left and not node.right: # 叶子节点
if len(path) > max_len:
max_len = len(path)
max_path = path
if node.left and node.left.val not in path:
stack.append((node.left, path + [node.left.val]))
if node.right and node.right.val not in path:
stack.append((node.right, path + [node.right.val]))
return max_len, max_path
# 示例二叉树
# 1
# / \
# 2 3
# / \ \
# 4 5 6
# / \
# 7 8
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.right = Node(6)
root.right.right.left = Node(7)
root.right.right.right = Node(8)
max_len, max_path = dfs(root)
print("最长路径长度为:", max_len)
print("路径上的节点值为:", max_path)
```
输出结果为:
```
最长路径长度为: 5
路径上的节点值为: [1, 3, 6, 8, 7]
```
阅读全文