我试图打印二叉树的所有路径(根到叶的路径),但没有效果。
我的策略是使用递归,基本情况是树为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
通过一些迭代,我发现以下解决方案可行。但我不确定是否有更有效的方法找到所有叶根路径。
该解决方案背后的思想是预序遍历
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
想法是在每次节点访问时构建路径(列表),如果当前节点是一片叶子,则将当前添加到路径并打印,如果不是,则只需添加当前以扩展路径:
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.对不起我的英语不好