1. 最大深度:根节点到最远叶子节点路径上的节点数:
def maxdepth(root):
if not root:
return 0
if not root.rchild and not root.lchild:
return 1
else:
ml = maxdepth(root.lchild)
ml += 1
mr = maxdepth(root.rchild)
mr += 1
return max(ml,mr)
2. 最小深度:根节点到最近叶子节点路径上的节点数。
思路:需要注意的是当某一节点只有一个孩子节点的情况,例如根节点只有左子树时,此时需要将新的根节点设置为老根节点的左孩子,然后在最后的结果上加1。如果像求最大深度那样的话,此时返回的最小值是1.
def mindepth(root):
if not root:
return 0
if not root.rchild and not root.lchild:
return 1
if not root.rchild: # 如果节点只有左孩子时,需要将根节点设置为左孩子,在最后的结果上+1
return mindepth(root.lchild)+1
if not root.lchild: # 如果节点只有右孩子时,需要将根节点设置为右孩子,在最后的结果上+1
return mindepth(root.rchild)+1
else:
ml = mindepth(root.lchild)
ml += 1
mr = mindepth(root.rchild)
mr += 1
return min(ml,mr)