二叉树的深搜和广搜

文章目录

  • 1.深搜
  • 2.广搜


1.深搜

深搜是图论中的经典算法,利用深度优先搜索可以产生目标图的响应拓扑排序表,可以解决很多图论问题,如最大路径等

我们利用栈的先进后出可以实现二叉树的深度优先搜索,也可以通过递归来实现深度优先搜索。(栈还可以实现二叉树的前、中、后序遍历)

具体逻辑为:

  1. 节点1进栈
  2. 栈顶1出栈,访问节点1,取出子节点3,2进栈
  3. 栈顶2出栈,访问节点2,取出子节点5,4进栈
  4. 栈顶4出栈,访问节点4,取出子节点7进栈,另一边为null跳过
  5. 栈顶7出栈,访问节点7,子节点null,null不处理
  6. 栈顶5出栈,访问节点5,子节点null,null不处理
  7. 栈顶3出栈,访问节点3.。。。。。。。。
  8. 。。。。
  9. 遍历结束

(前序遍历通过判断入栈出栈的对象类型是节点类型还是数值类型实现)
(栈创建方法:Deque stack = new LinkedList<>();)

2.广搜

官渡优先搜索是连通图的一种遍历策略,从顶点开始顺着树向下山路十八弯式的走完所有节点。

我们利用队列的先进先出可以实现

具体步骤为:

  1. 节点1进队
  2. 出队1,访问节点1,取出子节点2,3进队
  3. 出队2,访问节点2,取出子节点4,5进队
  4. 出队3,访问节点3,取出子节点6,7进队
  5. 出队4,访问节点4,取出子节点null,null跳过
  6. 出队5,。。。。。
  7. 出队6.,。。。。。
  8. 。。。
  9. 遍历结束

(队列创建方法:Queue queue= new LinkedList<>();)


你可能感兴趣的:(算法入门,java)