图的dfs非递归_树、图

链表LInkedList 是特殊化的 树Tree

树Tree 是特殊化 图Graph

的区别就在于 有没有环

二叉树

树的各种操作 一般是 递归, 而递归实质上就是在利用 栈机制,因此可以有两种方式构造栈

  • 使用递归,让 JVM 形成 递归栈
  • 手动构造栈 Stack<Node> stack = new Stack()<>;

但是,不管 手动 还是 自动,一定要确定好 递归出口。

递归中的小技巧:

由于递归中无法初始化局部变量因此可以将 局部变量 放在 形参 中,可以达到同样的效果。

同时,函数的 形参 同样也可作为递归函数 传递返回值 的通道。

遍历树的策略:DFS 和 BFS

深度优先搜索(DFS)

在这个策略中,我们采用 深度 作为优先级,以便从跟开始一直到达某个确定的叶子,然后再返回根到达另一个分支。

深度优先搜索策略又可以根据根节点、左孩子和右孩子的相对顺序被细分为

  • 前序遍历
  • 中序遍历
  • 后序遍历

宽度优先搜索(BFS)

我们按照高度顺序一层一层的访问整棵树,高层次的节点将会比低层次的节点先被访问到。

下图中的顶点按照访问的顺序编号,按照 1-2-3-4-5 的顺序来比较不同的策略。

92e39cedcebc79bc26f82f9c3facd4f6.png

本问题就是用宽度优先搜索遍历来划分层次:[[1], [2, 3], [4, 5]]。

二叉树的遍历,主要是取决于 根的访问顺序

  • 前序 - 根 左 右
  • 后续 -
  • 中序 - 左 右

5d276381d0b9149f8ae0959e23158e95.png

常见数据结构复杂度

740fe12713444fc9fe0604cca19105df.png
[ source: http://bigocheatsheet.com/]

数组排序算法时间和空间复杂度

5e725ee8de6b14b60fe7cb4f34b159c0.png
[ source: http://bigocheatsheet.com/]

动画演示树和图的工具

VisuAIgo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值