• 深度优先(DFS,Depth First Search)
  • 广度优先(BFS,Breath First Search)

深度优先遍历

以一个节点为起点,然后遍历起点的相连点,将遍历到的节点放入栈中,再以遍历到的节点,再遍历相连点,然后排除已遍历的节点,至到无法遍历后,将栈中的节点推出,直至结束。

demo

以下图为例,遍历所有节点

未命名文件 (1).jpg

  1. 以节点 1 为起点,遍历相连节点,得出 2、3、4 节点,并将节点 1 放入栈中 【1】,已遍历节点【1】
  2. 假设以从小到大的原则,以节点 2 继续遍历,得出相连点 1、3、5,由于节点1 已遍历,得到继续遍历节点3、5,此时栈中【1,2】,已遍历节点【1,2】
  3. 以节点3 继续遍历,得出相连节点 1、2、4、6,排除已遍历节点,得到继续遍历节点 4、6,栈中【1,2,3】,已遍历节点【1,2,3】
  4. 以节点4 继续遍历,得出相连节点 1、3、7,排除已遍历节点,得到继续遍历节点 7,栈中【1,2,3,4】,已遍历节点【1,2,3,4】
  5. 以节点7 继续遍历,得出相连节点 4,排除已遍历节点,无继续遍历节点,栈中【1,2,3,4,7】,已遍历节点【1,2,3,4,7】
  6. 由于无遍历数据了,推出7,栈中【1,2,3,4】,已遍历节点【1,2,3,4,7】
  7. 查询节点4,得出1、3、7都已遍历,推出4,栈中【1,2,3】,已遍历节点【1,2,3,4,7】
  8. 查询节点3,得出1、2、4、6,排除已遍历,得到继续遍历节点6,栈中【1,2,3】,已遍历节点【1,2,3,4,7】
  9. 以节点6继续遍历,得出3、8,排除已遍历,得到节点8,栈中【1,2,3,6】,已遍历节点【1,2,3,4,7,6】
  10. 以节点8继续遍历,得出5、6,排除已遍历,得到节点5,栈中【1,2,3,6,8】,已遍历节点【1,2,3,4,7,6,8】
  11. 以节点5继续遍历,得出2、8,排除已遍历,无节点,栈中【1,2,3,6,8,5】,已遍历节点【1,2,3,4,7,6,8,5】
  12. 然后相继推出栈中节点,直至结束。