当前位置: 首页 > 面试题库 >

在二叉树中打印所有从根到叶的路径

董和泽
2023-03-14
问题内容

我试图使用Java在二叉树中打印所有根到叶的路径。

public void printAllRootToLeafPaths(Node node,ArrayList path) 
{
    if(node==null)
    {
        return;
    }
    path.add(node.data);

    if(node.left==null && node.right==null)
    {
        System.out.println(path);
        return;
    }
    else
    {
        printAllRootToLeafPaths(node.left,path);
        printAllRootToLeafPaths(node.right,path);
    }      
}

在主要方法中:

 bst.printAllRootToLeafPaths(root, new ArrayList());

但是它给出了错误的输出。

给定的树:

   5
  / \
 /   \
1     8
 \    /\
  \  /  \
  3  6   9

预期产量:

[5,1,3]

[5、8、6]

[5、8、9]

但是输出产生了:

[5,1,3]

[5、1、3、8、6]

[5、1、3、8、6、9]

可以找出一个…


问题答案:

用以下方法调用递归方法:

printAllRootToLeafPaths(node.left, new ArrayList(path));
printAllRootToLeafPaths(node.right, new ArrayList(path));

传递时会发生什么path(而不是new ArrayList(path)在所有方法调用中使用单个对象,这意味着,当您返回原始调用者时,该对象的状态与原来不同。

您只需要创建一个新对象并将其初始化为原始值即可。这样,原始对象不会被修改。



 类似资料:
  • 我试图打印二叉树的所有路径(根到叶的路径),但没有效果。 我的策略是使用递归,基本情况是树为None或树节点为leaf return,否则,遍历树的左侧和右侧。 但我找不到同时保留左右树的方法。

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

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

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

  • 我必须获取二叉树中所有根到叶的路径。现在这通常是一项简单的任务,但现在我还必须识别左右节点。也就是说,当我进入节点的左子树时,该节点应记录在路径中为!abc,其中abc是节点名称。当进入右子树时,该节点应按原样记录。所以如果我的树是1(左)2(右)3,那么必须保存的两条路径是!1- 这确实获得了路径。但左右子树路径都连接在一起。也就是说,对于上面给出的示例,我得到[1,3,1,2]作为输出。我尝试

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