访问数组意味着我们保留记录是否访问过节点的数组。
答案 0 :(得分:0)
只要树的格式正确,就可以轻松遍历树。您不必跟踪是否有可能以无限循环的方式重复某些工作,因为只有一条路径可以到达每个节点。
但是对于图可能包含循环的广义图遍历,许多琐碎的算法在遇到循环时都会无休止地循环。为了确保此类算法确实终止,我们通常希望跟踪整个遍历过程中访问过的节点,而不是重新探索已经访问过的节点。
这就是visited
集合的目的(无论是数组,集合还是无关紧要的)。每个节点的替代方案可能是具有访问标志,该标志可以在遍历之前取消设置,而在遍历期间设置。这样可以避免使用全局集合,但有其自身的局限性(一次只能进行一次遍历)。
visited
集合不需要是“全局”的 1 ,但需要处于每个遍历的所有部分都共享的公共范围内。
1 如果它是“全局”的,那么在任何有意义的范围内,一次都只能一次遍历。
答案 1 :(得分:0)
为什么要对访问数组进行全局初始化?
由于该数组用于跟踪整个图,因此最好进行全局/类级别的初始化。
否则,在方法级初始化中,您需要通过引用传递跟踪信息(也称为visited[]
数组),或为每次探索节点的调用创建新的副本。
进一步,如果:
您正在跟踪当前节点本地的某些内容;或
算法的实现不是递归的;
您也可以取消本地初始化。