树也是一种图:
图的宽度优先在树上就是层次遍历,可以用队列实现。
tips:
- 通常宽度优先的题目都能用队列,比如二叉树层次化顺序的序列化和反序列化
- 用魔法打败魔法。
图的深度优先在树上就是前序遍历,可以用栈实现。
图可能有环,所以第三步就是这样一种机制,不会死循环
问题一: 宽度优先遍历
set是保证这个点不重复进队列。
深度优先遍历
tips: 栈保存的是回溯的路径,所以当出栈的时候,如果碰到没有加入去重集合的值,那么要将这个节点重新入栈。
tips:最常用的用途是依赖文件、编译顺序。
只有有向无环图才可以。
解法:
step1: 准备一个队列, 和一张当前节点入度的字典,将入度为0的节点放进队列
step2: 队列中弹出一个节点,并在字典中 将相邻节点入度减一,若该节点入度变成0,入队列
重复弹出队列操作。