Problem
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最小深度 2.
too young 思路
一层一层的遍历二叉树,遇到None的时候就返回当前深度
好几天不写leetcode了。。完全无从下手
dalao 思路-32ms
要注意叶子的定义,是不能有子节点的,所以[1,2]返回的应该是2
60ms的简短解决方案,没想到python的or有这种用法。。。
# 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):
if not root:
return 0
d = map(self.minDepth, (root.left, root.right))
return 1 + (min(d) or max(d))
中规中矩的解法,32ms
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
from collections import deque
class Solution(object):
def minDepth(self, root):
if not root:
return 0
next_node = deque()
cur = (1, root) #深度,当前位置
while(cur[1].left or cur[1].right):
if cur[1].left != None:
next_node.append((cur[0]+1, cur[1].left)) #深度+1,存下节点
if cur[1].right != None:
next_node.append((cur[0]+1, cur[1].right))
cur = next_node.popleft() #cur指向下一个
return cur[0]