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

给定一棵二叉树,找到所有根到叶的路径

步博艺
2023-03-14

给定一棵二叉树,问题是找到所有根到叶的路径。我们通过以列表的形式传递路径,并在到达叶子时将其添加到结果中来了解算法。

我的问题是存储所有路径需要多少空间。我的直觉是,每条路径将消耗树高度(O(h))的内存顺序,如果我们的完整二叉树中有2*n-1个节点,那么每个节点对应于一条路径,因此假设树高度平衡,空间复杂度将为O(n*log(n))。我的分析正确吗?

共有2个答案

贺博厚
2023-03-14

实际上,树的定义有一个直接的结果:任何两个节点之间都有一条唯一的路径。因此,如果n是叶子的数量,那么总(根到叶)路径=n。相应地,树的高度是O(对数n)。

郁高韵
2023-03-14

你的推理是正确的,但可以做得更精确,平衡的二叉树不一定是完整的二叉树。

设N(h)为高度为h时的路径数。然后N(h)≤ 2 N(h-1)这是因为,给定一棵高度为h的树,每个子树的高度最多为h-1。所以

N(h)=O(2h)。

现在我们需要约束h。因为h出现在指数中,所以仅仅找到它的增长顺序是不够的。更确切地说,众所周知

n≥ 2h-1

所以

h≤ 日志(n 1)

将此插入到我们之前的内容中

N(h)=O(2log(n 1))=O(n)。

在编写时,内存是路径上每个路径的节点的总和。每条路径上的节点总数最多为log(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] 可以找出一个… 问题答案: 用以下方法调用递归方法: 传递时会发生什么(而不是在所有方法调用中使用单个对象,这意味着,当您返回原始调用者

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

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

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

  • 我有一个很严重的问题,就是在一棵树中重复搜索子树。 我试过了,但是。。。 似乎没有正确的形式。containsTree函数在找到与另一个节点不同的节点时停止搜索。 下面是两棵树的例子。 在这种情况下,当函数比较右边的子树和左边的子树时,当find等于父节点但它有不同的子节点时,它会停止搜索。我需要函数不要停止搜索,而是抛出这一点,搜索所有其他子节点及其子树。

  • 本文向大家介绍手写代码:给一个二叉树,怎么得到这棵树的镜像相关面试题,主要包含被问及手写代码:给一个二叉树,怎么得到这棵树的镜像时的应答技巧和注意事项,需要的朋友参考一下 参考回答: