原题
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
思路一
- 类似于求最大深度时的递归思路
- 不过需要注意的是当某一节点的左子节点(右子节点类似)为空时,不应该参与最小值的比较(否则一定为最小,但是他并不是叶子节点),所以需要返回该节点的右子节点的最小深度
代码实现
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None # 与求最大深度类似,不过需要注意的是当某一节点左子节点(右子节点类似)有为空的情况时 # 应该不参与最小值的比较,需要返回该节点的右子节点的最小深度 # 这里通过返回right + left + 1简化上述思路 class Solution(object): def minDepth(self, root): """ :type root: TreeNode :rtype: int """ return self.helper(root) def helper(self, node): if node == None: return 0 left = self.helper(node.left) right = self.helper(node.right) return min(right, left) + 1 if (right and left) else right + left + 1
思路二
- 采用正向计数的递归思想
代码实现
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None # 正向计数递归 class Solution(object): def minDepth(self, root): """ :type root: TreeNode :rtype: int """ return self.dfs(root,0) def dfs(self,x,level): if x==None:return level if x.left==None and x.right==None:return level+1 if x.left!=None and x.right==None:return self.dfs(x.left,level+1) if x.left==None and x.right!=None:return self.dfs(x.right,level+1) return min(self.dfs(x.left,level+1),self.dfs(x.right,level+1))