树6,例题二叉树的最大、最小深度
2018-08-01 本文已影响0人
小碧小琳
都是用DFS来解决,提到DFS,很自然的想到用递归做
一、Maximum Depth of Binary Tree
参考Maximum Depth of Binary Tree
- 递归结束条件:
输入节点为None时,直接返回0,表示此节点向下深度是0 - 递归更改条件:
每次深度往下搜索一个子节点时,深度都需要加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 maxDepth(self, root):
if root == None:
return 0
else:
return max(self.maxDepth(root.right)+1,self.maxDepth(root.left)+1)
二、Minimum Depth of Binary Tree
在二叉树的功能测试中,经常会有这样的测试样例:没有分叉,一条路走到黑的树。
比如一条树从头到尾只有左子节点,如果直接把上述的代码中max改为min,那么就会在一开始对右子节点进行递归调用时返回0,而其实,对于这种特殊情况右子节点是压根不能考虑的。
因此在一开始,需要判断这个树的根节点没有子节点,只有一个子节点,有两个子节点的情况。
这是最短路径长度的代码
class Solution:
def minDepth(self, root):
if root == None:
return 0
if root.left ==None and root.right ==None:
return 1
elif root.left == None:#左子节点为空,父节点需要向右子节点走,一直走到叶节点
return self.minDepth(root.right) + 1
elif root.right == None:
return self.minDepth(root.left) + 1
else:
return min(self.minDepth(root.right),self.minDepth(root.left))+1