python-opencv 最快的遍历颜色空间_算法基础 树遍历的几套模板(python实现)

我们知道,构成算法的基础数据结构,无非两种,数组和链表。至于特点嘛,数组的特点就是支持下标随机访问,而链表则支持快速删除和插入,在某种程度上形成了互补,当然了,这两者都是属于一维空间。

树这种结构,如其名,有分叉。构成分叉需要两个元素,父节点,以及多个分支,也就是子节点,或者说叶子结点。空间结构升级到了二维。

为了简单起来,我们不妨以二叉树为例。

算法书上将二叉树的遍历分为三种,前序遍历,中序遍历,后序遍历。前序遍历是从父节点开始,左节点,然后右节点,依次遍历;中序遍历是从左节点开始,再遍历父节点,然后右节点;后序遍历是左节点,右节点,父节点。那么,树的遍历,怎么实现呢?

递归、迭代、DFS、BFS、层序遍历、颜色标记法,实现方法有很多。

以本题为例子:

https://leetcode-cn.com/problems/binary-tree-preorder-traversal/submissions/

27ff2671bf6a8cb800970797c323eba7.png

首先,我们看递归怎么解。

二叉树的结构特点就是,左子树,右子树都是树。于是我们每次取出节点的值,然后左右递归即可。

a8abc9bd3573c947235e1b73a2918b16.png

其次,我们可以放一个栈来辅助我们迭代,严格遵从先取父节点的值,然后存入左儿子,左儿子出栈时,再走右儿子:

22092908c1291f947030971510a8e506.png

接着,我们看下LeetCode上有人发明的颜色标记法,标记两种颜色,gray为访问过的节点,white为没有访问的节。当遇到gray时,把结果写入。当遇到white时,要按照前序遍历的规则反过来将结点和颜色对插入栈中。之所以要反着插入,主要是因为栈的特性是后进先出。所以要保证父节点先出来,再是左节点、右节点。

512a42e8cddc982080c2a2e54bd27ef9.png

再接着,关于DFS(深度优先遍历)解法,其实和第一种一样:

64e95fc88619ffb89caedbe478e35e15.png

最后,关于BFS(广度优先遍历),也就是所谓按层遍历:

029ad7f9f8f96cebee7793cb79dabdb3.png

如果你觉得本篇写的还不错,请点赞、转发、在看三连哦!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值