当前位置: 首页 > 知识库问答 >
问题:

打印二叉树(DFS)的所有路径

南宫龙野
2023-03-14

我试图打印二叉树的所有路径(根到叶的路径),但没有效果。

我的策略是使用递归,基本情况是树为None或树节点为leaf return,否则,遍历树的左侧和右侧。

但我找不到同时保留左右树的方法。

def pathSum(self, root, target, result):

    if not root:
        return []

    if not root.left and not root.right:
        return [root.val]

    for i in [root.left, root.right]:
        path = [root.val] + self.pathSum(i, target, result)
        print("path", path)
        return path

共有2个答案

刘升
2023-03-14

通过一些迭代,我发现以下解决方案可行。但我不确定是否有更有效的方法找到所有叶根路径。

该解决方案背后的思想是预序遍历

def allPaths(self, root, path, all_path):
    if not root.left and not root.right:
        path.append(root.val)
        all_path.append(path[:])
        return

    if root:
        path.append(root.val)
        self.allPaths(root.left, path, all_path)
        path.pop(-1)
        self.allPaths(root.right, path, all_path)
        path.pop(-1)
    return all_path
酆君墨
2023-03-14

想法是在每次节点访问时构建路径(列表),如果当前节点是一片叶子,则将当前添加到路径并打印,如果不是,则只需添加当前以扩展路径:

def pathSum(self, path):

    if not self.left and not self.right:
        print(path + [self.val])
        return

    self.left.pathSum(path + [self.val])
    self.right.pathSum(path + [self.val])


root.pathSum([])

更新:如果要保留所有路径:

def pathSum(self, current_path, all_paths):

    if not self.left and not self.right:
        print('Path found: ' + str(current_path + [self.val]))
        all_paths.append(current_path + [self.val])
        return

    self.left.pathSum(current_path + [self.val], all_paths)
    self.right.pathSum(current_path + [self.val], all_paths)

all_paths = []

root.pathSum([], all_paths)

print('All paths: ' + str(all_paths))
 类似资料:
  • 本文向大家介绍Java实现打印二叉树所有路径的方法,包括了Java实现打印二叉树所有路径的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现打印二叉树所有路径的方法。分享给大家供大家参考,具体如下: 问题: 给一个二叉树,把所有的路径都打印出来。 比如,对于下面这个二叉树,它所有的路径为: 8 -> 3 -> 1 8 -> 2 -> 6 -> 4 8 -> 3 -> 6 ->

  • 问题内容: 我试图使用Java在二叉树中打印所有根到叶的路径。 在主要方法中: 但是它给出了错误的输出。 给定的树: 预期产量: [5,1,3] [5、8、6] [5、8、9] 但是输出产生了: [5,1,3] [5、1、3、8、6] [5、1、3、8、6、9] 可以找出一个… 问题答案: 用以下方法调用递归方法: 传递时会发生什么(而不是在所有方法调用中使用单个对象,这意味着,当您返回原始调用者

  • 下面的函数打印所有的子路径。是否可以只显示完整的路径,即A->B->C(包含以下所需的输出)。

  • 以下是一个采访问题。 您将获得一个二叉树(不一定是BST),其中每个节点都包含一个值。设计一个算法来打印所有总计为该值的路径。注意,它可以是树中的任何路径-它不必从根开始。 虽然我能够找到树中从根开始的所有路径都有给定的总和,但对于不是从根开始的路径,我无法这样做。

  • 我一直在尝试从Node切换到Java,我想知道的一件事是如何以类似于Node显示的格式打印对象,例如二叉树。例如,我的二叉树初始化代码如下: 在节点中,此二叉树将显示如下: 然而在Java,当我做system.out.println(树); 输出->BinaryTree@4554617c 什么是打印我的BinaryTree的正确方法?什么是好方法?有没有一种方法可以用JSON格式打印树?

  • 我需要打印一个具有深度和从高到低的二叉搜索树,根据深度,在打印节点之前增加破折号的数量。树根用0破折号,她的树梢用1破折号……我可以打印没有破折号的树,但我不知道如何用破折号打印。我用的是C.对不起我的英语不好