前序遍历
中序遍历
后序遍历
层次遍历
今天刷了该标签的题, 自己速度还是慢, 总结一下经验分享给大家.
该标签所有的题都围绕着四个遍历.
特别是用递归遍历二叉树,一定要牢牢掌握.
套路如下
def visit(node){
//前序
visit(node.left)
//中序
visit(node.right)
//后序
}
感觉有点简单? 你细品. 什么问题是三选一,什么问题是全都要呢?
首先要把树与递归
牢牢联系起来,
题 | 遍历方法 |
---|---|
最大深度 | 后序遍历 |
路径总和 | 前序 |
从中序和后序构造二叉树 | 前序 |
序列化与反序列化 | 前序 |
填充右侧节点 | 层次 |
前序遍历DFS
是不是用的很多?
为啥呢?
其实我也不知道他为啥那么多. 但他是打头的, 那就好好看看琢磨琢磨DFS
.
既然DFS
出现的多, 那就自己列一个小表.
- 先前序遍历
DFS
- 后序遍历
- 层次遍历
BFS
- 中序遍历
- 混合
看到二叉树的题,就挨个对一遍.
然后把条件往里面填不就好了,
def visit(node){
//1.前序
visit(node.left)
//2.中序
visit(node.right)
//3.后序
}
- 一般
if node == None
和构造新节点在1.
, - 几乎没有东西放在
2.
, - 比大小的,返回真假的在
3.
.
至于层次遍历, 运用队列先进先出, 控制好每层个数不就好了.
有人会说递归性能不好, 没有迭代nb,u1s1
确实,
但是
切记过早优化是万恶之源
先写出来能跑的, 再跑对, 之后积累大量经验再说优化.