LeetCode--111--最长公共前缀
问题描述:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回它的最小深度 2。
思路:
用层序遍历,发现为叶子节点时,返回其所在的层即为最小深度。
方法1:
1 class Solution(object): 2 def minDepth(self, root): 3 """ 4 :type root: TreeNode 5 :rtype: int 6 """ 7 if not root: 8 return 0 9 if not root.left and not root.right: 10 return 1 11 last = 0 12 front = -1 13 rear = -1 14 level = 0 15 l_list=[] 16 l_list.append(root) 17 rear += 1 18 level += 1 19 while front < rear: 20 front += 1 21 p = l_list.pop(0) 22 if not p.left and not p.right: 23 return level 24 if p.left: 25 l_list.append(p.left) 26 rear += 1 27 if p.right: 28 l_list.append(p.right) 29 rear += 1 30 if front == last: 31 level += 1 32 last = rear
方法2:(递归)当左子树为null时,高度为右子树+1,树的最小高度为左子树最小的高度+1.
1 class Solution(object): 2 def minDepth(self, root): 3 """ 4 :type root: TreeNode 5 :rtype: int 6 """ 7 if root: 8 if root.left==None: 9 return self.minDepth(root.right)+1 10 elif root.right==None: 11 return self.minDepth(root.left)+1 12 else: 13 return min(self.minDepth(root.left),self.minDepth(root.right))+1 14 else: 15 return 0
2018-09-10 19:23:25