📌  相关文章
📜  教资会网络 | UGC NET CS 2016 年 7 月 – III |问题 25(1)

📅  最后修改于: 2023-12-03 15:26:03.706000             🧑  作者: Mango

教资会网络 | UGC NET CS 2016 年 7 月 – III | 问题 25

这是一道计算机科学相关的问题,提供给想要通过 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()
总结

这道题目考查了程序员的基本思路和编程能力,需要理解回溯法的基本思想,具备递归编程的能力。在编程实现时,要注意路径的更新和回溯,避免出现意外错误。