给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回它的最小深度 2.
第一次的代码:
注意,[1,2]的深度是2,也就是必须要有叶节点,计算叶节点到root的最小深度。叶子left和right都是None.
BFS:
def c(r):#r是节点列表
tu=[]
for i in r:
if not i.left and not i.right:#叶子节点,返回
return 1
else:#进入下一层
if i.left:
tu.append(i.left)
if i.right:
tu.append(i.right)
return 1+c(tu)#返回第一层叶子节点深度
if not root :
return 0
return c([root])
64ms,排名95%
DFS :
def c(r):
if not r:#空
return 0
ld=c(r.left)
rd=c(r.right)
if not ld or not rd:#只是有一颗子树深度为空
return ld+rd+1#返回不为空的子树深度+0+该节点层深度1
#或返回0+0+root层深度1
else:
return min(ld,rd)+1#若都不为空,返回最小深度+该节点层深度1
if not root:
return 0
return c(root)
64ms,排名95%