简介
深度优先搜索是对图或者树的搜索,主要是按照深度优先,搜索见底之后,在回溯。在理解深度优先时,最好理解递归和回溯之后。再理解这个算法会相对容易些。
下图是深度优先搜索遍历树的过程。从A->B->E在回退到B再到F。再回退到B。最后回退到A。然后遍历CD。这就是深度优先搜索啦。
LeetCode例题
1.111二叉树的最小深度
我们先将示例中的树给画出来。
深度优先的遍历过程如下:
从3到9 发现往下已经没有孩子了。返回1,到根节点再加1。深度就为2。接着遍历右边。从3->20->15发现没有孩子了返返回1.回退到20。20 还有右孩子,接着遍历右边。到7时没有孩子了。回退到20为2,再回退到3。深度为3.所以二叉树的最小深度为2。
接着我们来完成代码部分:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def minDepth(self, root: TreeNode) -> int:
if root == None:
return 0
min_depth = float('inf')
if root.left==None and root.right ==None: #返回结果
return 1
if root.left !=None:
min_depth = min(min_depth,self.minDepth(root.left)) #遍历左边并比较
if root.right != None:
min_depth = min(min_depth,self.minDepth