https://leetcode-cn.com/problems/minimum-depth-of-binary-tree
先判断根节点是否为None,如果是,则返回0,否则置depth为1;
再把根节点的左右子树入栈;
对一层节点,每次取两个,如果节点均为空则返回depth,否则把非空节点的左右子树入栈;
最后一定会找到最小深度的叶子节点(无左右子树)。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
depth = 1
stack = [root.left, root.right]
while stack:
for i in range(len(stack)//2):
node1, node2 = stack.pop(0), stack.pop(0)
if node1 and node2:
stack.extend([node1.left, node1.right, node2.left, node2.right])
elif node1:
stack.extend([node1.left, node1.right])
elif node2:
stack.extend([node2.left, node2.right])
else:
return depth
depth += 1
递归:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root:
return 0
elif root.left and root.right:
return 1 + min(self.minDepth(root.left), self.minDepth(root.right))
else:
return 1 + self.minDepth(root.left) + self.minDepth(root.right)