📜  门| GATE-CS-2005 |第 90 题(1)

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

Gate-CS-2005 | 第90题解析

这道题目是关于二叉树的遍历的,我们需要在给定的二叉树中,找到从根节点到叶子节点的所有路径,并将它们打印出来。

问题分析

我们首先需要明确,如何在二叉树中找到从根节点到叶子节点的路径。这其实是一个递归的过程。我们可以定义一个递归函数,它的参数是当前节点和当前路径。如果当前节点为空,那么我们不需要做任何操作;如果当前节点是叶子节点,那么我们可以将当前路径打印出来;否则,我们继续递归访问当前节点的左子树和右子树,将当前节点加入当前路径中。

在代码实现的时候,我们可以使用先序遍历的方式来递归访问二叉树,并将当前节点加入当前路径中。如果当前节点是叶子节点,那么我们就将当前路径打印出来。代码实现如下:

class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

def print_paths(root):
    path = []
    print_paths_helper(root, path)

def print_paths_helper(node, path):
    if node is None:
        return

    path.append(node.data)

    if node.left is None and node.right is None:
        print(path)
    else:
        print_paths_helper(node.left, path)
        print_paths_helper(node.right, path)

    path.pop()

在这个代码中,我们定义了一个 Node 类来表示二叉树节点。它有一个 data 属性表示节点的值,以及 leftright 属性表示左子树和右子树。我们还定义了一个 print_paths 函数来打印从根节点到叶子节点的所有路径。在这个函数中,我们创建了一个空的路径列表,然后调用一个辅助函数 print_paths_helper 来实现递归遍历二叉树。这个函数接受两个参数,一个是当前节点,另一个是当前路径列表。当递归访问到叶子节点时,我们就将当前路径打印出来。

总结

通过本题的分析,我们可以发现,递归是解决许多二叉树问题的常用方法。我们只需要定义一个递归函数,考虑好递归结束的条件和递归时需要做的操作,就可以很容易地实现很多二叉树的遍历、搜索和修改操作。