深度优先遍历算法是经典的图论算法,深度优先遍历算法的搜索逻辑跟它名字一样,只要有可能,就尽量深入搜索,知道找到答案,或者尝试了所有可能后确定没有解。
沿着一个目的不断的检索,直到把所有的问题都解决,再去检索下一个目的。
检索问题的本质就是试探问题的所有可能性,按照特定的规律和顺序,不断地去搜索答案,直到找到问题的解。若把所有可能都走一遍,也没找到解,就说明这个问题没有解。
二叉树是一种特殊的数据结构。常见的数据结构包含数组、链表、图、队列、散列表与树。
二叉树的每一个节点都有两个分支,称为“左子树” 与 “右子树”。二叉树的每一层最多有(2^n - 1)个节点
术语 | 解释 |
---|---|
度 | 节点的度为节点的子树个数 |
叶子节点 | 度为零的节点 |
分支节点 | 度不为零的节点 |
孩子节点 | 节点下的两个子节点 |
双亲节点 | 节点上一层的源头节点 |
兄弟节点 | 拥有同一个双亲节点的节点 |
根 | 二叉树的源头节点 |
深度 | 二叉树中节点的层的数量 |
因为每一个节点都与两个子节点相连,所以只需要拥有根节点就能找到二叉树任意节点。
class Node():
def __init__(self, x):
# 节点值
self.val = x
# 左侧节点
self.left = None
# 右侧节点
self.right = None
L、R、D分别代表左子树、右子树和根
如图:
节点的访问顺序
- DLR(先序): 1-2-4-5-3-6-7
- LDR(中序): 4-2-5-1-6-3-7
- LRD(后序): 4-5-2-6-7-3-1
从先序,中序,后序年里都属于深度优先遍历。在深度优先遍历中,从根节点出发直奔最远的节点。而在广度优先遍历中,首先访问离根节点最近的节点,按层递进。以上图为例,顺序为:1-2-3-4-5-6-7.
原文:https://www.cnblogs.com/JoshuaP/p/13089403.html