📅  最后修改于: 2023-12-03 15:26:03.706000             🧑  作者: Mango
这是一道计算机科学相关的问题,提供给想要通过 UGC NET CS 考试的人参考。
给定一个二叉树,实现一个函数用于输出从根节点到每个叶子节点的路径。每个路径应该在一行上输出,路径的值应该按从根节点到叶子节点的顺序输出。例如,对于下面的二叉树:
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
输出应该为:
5 4 11 7
5 4 11 2
5 8 13 5
5 8 4 1
对于这道题目,我们可以使用回溯法来实现。回溯法是一种搜索所有可能解的算法,从根节点开始遍历,遇到叶子节点就输出路径,每次回溯到上一层时要删除上一次遍历的节点。
具体实现上,我们先创建一个空的字符串,然后将当前节点的值加入到路径中,如果该节点为叶子节点,则将路径输出,否则递归遍历该节点的左右子树。在回溯的时候,我们需要将路径中上一个节点以及该节点值删除。
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 not node.left and not node.right:
print(' '.join(str(x) for x in path))
# 访问左子树
if node.left:
print_paths_helper(node.left, path)
# 访问右子树
if node.right:
print_paths_helper(node.right, path)
# 回溯,删除路径中上一个节点以及该节点值
path.pop()
这道题目考查了程序员的基本思路和编程能力,需要理解回溯法的基本思想,具备递归编程的能力。在编程实现时,要注意路径的更新和回溯,避免出现意外错误。