Skiena的《算法》一书中的一个问题:
设G是连通无向图。一条边e的去除使图断开,它被称为桥。在G的深度优先搜索树中,每个桥e一定是一条边吗?
我认为桥是一条边,它的endpoint是一个割结点,因为割结点的去除会断开图的连接,所以去掉那个边也会断开图的连接。DFS搜索树中的边是树边&后边,只有树边可以被切割边(或桥),因为后边移除不会断开图的连接。
基本上是的。不过,我有几点意见:
我认为桥是一条边,它的endpoint是一个割结点,因为割结点的去除会断开图的连接,所以去掉那个边也会断开图的连接。
这并不确切。特别是,如果您将其读作(bridge=>edge有一个剪切节点),则这是正确的。但用“桥是一条边,它的endpoint是...”来表述,它暗示了相反的含义,这是不正确的。总而言之,这句话在很大程度上与论点的其余部分无关,我将省略它。
...只有树边可以被切割边(或桥),因为后边移除不会断开图形的连接。
对,就是这样。此外,您还必须注意,DFS探索连通图的所有顶点(或标记所有边)。
我正在学习C++语言,我正在尝试编写BST,但是出了问题。我尝试添加元素到空树,根是NULL,但添加元素后,根仍然是NULL,尽管添加成功了(我在调试模式下看到,节点设置为tmp)。我不知道为什么会这样。
我的任务是计算每个节点的深度,并将其存储在Node类中给出的“深度”中。但是我不知道我应该如何处理这个任务。我在互联网上寻找一些示例,但没有找到任何适合我的任务的示例。这是我给定的Node类的代码: 我以为我可以用类似的方法来计算树的高度,但是没有成功。有帮助吗?
我有一个很严重的问题,就是在一棵树中重复搜索子树。 我试过了,但是。。。 似乎没有正确的形式。containsTree函数在找到与另一个节点不同的节点时停止搜索。 下面是两棵树的例子。 在这种情况下,当函数比较右边的子树和左边的子树时,当find等于父节点但它有不同的子节点时,它会停止搜索。我需要函数不要停止搜索,而是抛出这一点,搜索所有其他子节点及其子树。
在一个已执行DFS的无向图中(为了生成一个DFS树,从而将每条边分类为树边或后边),图中是否存在仅由后边组成的循环,即没有树边?
给定二叉查找树(BST)和整数val的根。 在BST中找到该节点的值等于val的节点,并返回以该节点为根的子树。如果这样的节点不存在,则返回null。 为什么'ans=root'不起作用??