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

获取二叉树中的所有根到叶路径,同时确定方向

那绪
2023-03-14

我必须获取二叉树中所有根到叶的路径。现在这通常是一项简单的任务,但现在我还必须识别左右节点。也就是说,当我进入节点的左子树时,该节点应记录在路径中为!abc,其中abc是节点名称。当进入右子树时,该节点应按原样记录。所以如果我的树是1(左)2(右)3,那么必须保存的两条路径是!1-

def get_tree_path(root, paths, treepath):
    if not root:
        return
    if not root.left and not root.right:
        treepath.append(root.data)
        paths.append(treepath)
        
    if root.left:
        treepath.append('!'+root.data[0])
        get_tree_path(root.left, paths, treepath)

    if root.right:
        treepath.append(root.data[0])
        get_tree_path(root.right, paths, treepath)

这确实获得了路径。但左右子树路径都连接在一起。也就是说,对于上面给出的示例,我得到[1,3,1,2]作为输出。我尝试了这里给出的许多建议:在二叉树和二叉搜索树路径列表中打印所有根到叶的路径,但我只会得到更多的错误。请帮忙。

共有1个答案

澹台镜
2023-03-14

问题是,当您将treepath保存到路径时,您不会删除treepath的内容。

为此,您需要为每个递归调用创建一个新列表:

if root.left:
    treepath_left = list(treepath)
    treepath_left.append('!'+root.data[0])
    get_tree_path(root.left, paths, treepath_left)

if root.right:
    treepath_right = list(treepath)
    treepath_right.append(root.data[0])
    get_tree_path(root.right, paths, treepath_right)
 类似资料:
  • 给定一棵二叉树,问题是找到所有根到叶的路径。我们通过以列表的形式传递路径,并在到达叶子时将其添加到结果中来了解算法。 我的问题是存储所有路径需要多少空间。我的直觉是,每条路径将消耗树高度(O(h))的内存顺序,如果我们的完整二叉树中有2*n-1个节点,那么每个节点对应于一条路径,因此假设树高度平衡,空间复杂度将为O(n*log(n))。我的分析正确吗?

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

  • 我试图搜索给定红黑树中所有根到叶的路径。特别是,我想编写一个测试,在给定rbt的情况下,该测试将断言每个路径具有相同数量的黑色节点。 我用两个全局变量尝试这样的东西: 然而,当左分支中的黑色节点右侧有红色节点时,我遇到了麻烦,因为这意味着计数比应该减少的更多。 有没有更好的方法来搜索根到叶的路径,计算特定值的频率,然后以某种方式比较计数?或者,如果给定rbt余额,是否有一种完全不同的方法来测试rb

  • 我试图找到从根到叶的最小路径和,还需要计算最小路径。如果解决方案在左子树中,我的解决方案有效,但是如果结果在右子树中,根节点在结果路径中添加了两次,是否有人可以查看我的解决方案并帮助我修复此错误,如果有,还可以建议更好的运行时解决方案 我正在使用回溯访问所有节点,我认为我的解决方案的时间复杂度将是O(N)(因为所有节点都应该被访问,如果我错了,请纠正我)

  • 我有一棵看起来像上面的树,由一个链接结构表示: 我的目标是找到从根节点到叶节点的所有路径。 我的树遍历算法如下所示: 当我运行它时,我确信树正在按图所示构建。我已经测试过了。然而,我无法找出我的树遍历分割错误的原因。 我得到的输出是: 我已经在高度较小的树上测试了它,它是有效的。但是出于某种原因,它不适用于高度大于2的树。我认为这是树出了问题,我检查并打印了每个父级、左子级和右子级,它们打印出来如

  • 上面的函数将包含二叉树每个叶的路径的数组附加到全局数组。 代码工作正常,但我想删除全局变量,并使函数返回数组。我怎么能那样做?