leetcode 树的最小深度 | map( ) 的用法

来源:互联网 发布:自动变速箱测试软件 编辑:程序博客网 时间:2024/06/01 09:02

求一棵树的最小深度:

需要注意的是,如果一棵树退化为链表,即一棵树及其所有子树都仅有 左/右 子树,则应当算其对应链表的最大长度。叶节点的定义为:该节点的左右子树都是null;一棵树的高度应当为根到叶节点的长度。

该树的最小深度为5

思路:

1. 思路简单,但代码复杂(若是针对每条路径的分析,可以把注意点定在叶节点处,叶节点的定义为 node.left == node.right==None)

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def minDepth(self, root):        if not root:  #如果root为空,则表示该树是空树。            return 0        if not root.left and not root.right: #判断是否为叶节点            return 1        else: #如果不是叶节点            if root.left and root.right: #如果左右子节点都有值,返回深度小的。                return min(1+self.minDepth(root.left),1+self.minDepth(root.right))            if root.left and not root.right: #如果只有一个子节点,则迭代该子节点。(这部分能够保证迭代过程中,root!=None)                return 1+self.minDepth(root.left)            if root.right and not root.left:                return 1+self.minDepth(root.right)


2. 利用深度优先的方式,递归的遍历所有结点,返回“较小的深度+1”,但如果较小的深度为0,则返回“较大的深度+1”。

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def minDepth(self, root):        if not root:             return 0        d = map(self.minDepth, (root.left, root.right)) #d 中保存了左右两边结点的结果        return 1 + (min(d) or max(d))  # 若min(d)不为0,则 1+mid(d);否则 1+max(d)

这里说一下 map( )函数的用法:

Arr = map(fun,arr)

其中fun表示某一函数,arr表示序列,map的作用是将arr中的每个元素挨个放入函数fun中,其结果依次保存在序列Arr中

eg. 1

def fun(x):    return x+1    arr = [1,2,3]Arr = map(fun,arr)print Arr#[2,3,4]



eg. 2

def fun(x,y):    return x+y    arr1 = ["hello ","bye ","hello "]arr2 = ["world","world","Python"]Arr = map(fun,arr1,arr2)print Arr
#['hello world', 'bye world', 'hello Python']



原创粉丝点击