二叉树中从每个叶子结点到根结点的路径
时间: 2023-04-25 16:03:53 浏览: 278
二叉树中从每个叶子结点到根结点的路径,可以理解为从每个叶子结点出发,沿着树的分支一直向上走,直到到达根结点的路径。这些路径可以用递归的方式来实现,即从每个叶子结点开始,依次向上遍历父节点,直到到达根结点。在遍历的过程中,可以将经过的节点保存在一个列表中,最终得到从叶子结点到根结点的路径。
相关问题
输出二叉树中从每个叶子结点到根结点的路径
以下是输出二叉树中从每个叶子结点到根结点的路径的 Python 代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def print_all_paths(root: TreeNode):
def dfs(node, path):
if not node:
return
path.append(node.val)
if not node.left and not node.right:
print(path[::-1])
else:
dfs(node.left, path)
dfs(node.right, path)
path.pop()
dfs(root, [])
```
这里我们使用深度优先搜索(DFS)遍历整个二叉树,并用一个列表 `path` 记录当前遍历路径上经过的结点值。当遇到叶子结点时,我们将 `path` 列表反转输出,即得到从叶子结点到根结点的路径。
注意在每次遍历完一个结点后,需要将其从 `path` 列表中弹出,以确保下一次遍历从正确的位置开始。
输出二叉树中从每个叶子结点到根结点的路径。
可以使用递归的方式来解决该问题。
首先,我们需要判断当前节点是否为叶子节点。如果是叶子节点,则将该节点的值加入路径中,并输出路径。如果不是叶子节点,则分别对其左子树和右子树进行递归操作。
以下是具体的实现代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def print_paths(root):
path = []
print_paths_helper(root, path)
def print_paths_helper(node, path):
if node is None:
return
path.append(node.val)
if node.left is None and node.right is None:
print_path(path)
else:
print_paths_helper(node.left, path)
print_paths_helper(node.right, path)
path.pop()
def print_path(path):
for val in path[::-1]:
print(val, end=" ")
print()
# 测试代码
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)
print("二叉树路径如下:")
print_paths(root)
```
输出结果为:
```
二叉树路径如下:
4 2 1
5 2 1
6 3 1
7 3 1
```
阅读全文