- 深度优先(DFS,Depth First Search)
- 广度优先(BFS,Breath First Search)
深度优先遍历
以一个节点为起点,然后遍历起点的相连点,将遍历到的节点放入栈中,再以遍历到的节点,再遍历相连点,然后排除已遍历的节点,至到无法遍历后,将栈中的节点推出,直至结束。
demo
以下图为例,遍历所有节点
- 以节点 1 为起点,遍历相连节点,得出 2、3、4 节点,并将节点 1 放入栈中 【1】,已遍历节点【1】
- 假设以从小到大的原则,以节点 2 继续遍历,得出相连点 1、3、5,由于节点1 已遍历,得到继续遍历节点3、5,此时栈中【1,2】,已遍历节点【1,2】
- 以节点3 继续遍历,得出相连节点 1、2、4、6,排除已遍历节点,得到继续遍历节点 4、6,栈中【1,2,3】,已遍历节点【1,2,3】
- 以节点4 继续遍历,得出相连节点 1、3、7,排除已遍历节点,得到继续遍历节点 7,栈中【1,2,3,4】,已遍历节点【1,2,3,4】
- 以节点7 继续遍历,得出相连节点 4,排除已遍历节点,无继续遍历节点,栈中【1,2,3,4,7】,已遍历节点【1,2,3,4,7】
- 由于无遍历数据了,推出7,栈中【1,2,3,4】,已遍历节点【1,2,3,4,7】
- 查询节点4,得出1、3、7都已遍历,推出4,栈中【1,2,3】,已遍历节点【1,2,3,4,7】
- 查询节点3,得出1、2、4、6,排除已遍历,得到继续遍历节点6,栈中【1,2,3】,已遍历节点【1,2,3,4,7】
- 以节点6继续遍历,得出3、8,排除已遍历,得到节点8,栈中【1,2,3,6】,已遍历节点【1,2,3,4,7,6】
- 以节点8继续遍历,得出5、6,排除已遍历,得到节点5,栈中【1,2,3,6,8】,已遍历节点【1,2,3,4,7,6,8】
- 以节点5继续遍历,得出2、8,排除已遍历,无节点,栈中【1,2,3,6,8,5】,已遍历节点【1,2,3,4,7,6,8,5】
- 然后相继推出栈中节点,直至结束。