LeetCode559. Maximum Depth of N-ary Tree

第一次写出了具有迭代和递归的函数,还是有点收获的,虽然题目比较简答

当要对某些对象重复使用时,考虑循环,也就是迭代

当函数可以简化一个重复的操作时,考虑递归,而且就当下一次使用这和函数的结果已经有啦,就不会考虑的太复杂

自己写的答案:

"""
# Definition for a Node.
class Node(object):
    def __init__(self, val, children):
        self.val = val
        self.children = children
"""
class Solution(object):
    def maxDepth(self, root):
        """
        :type root: Node
        :rtype: int
        """
        if not root:
            return 0
        if not root.children:
            return 1
        sub_max=[]
        for child in root.children:
            sub_max.append(self.maxDepth(child)+1) 
        return max(sub_max)

反思学习:

   1.对list不知道是None还是[ ]的时候,使用 if not list

   2.list 添加元素使用append

  3.list取最值max

优秀答案:

class Solution(object):
    def maxDepth(self, root):
        """
        :type root: Node
        :rtype: int
        """
        if not root:
            return 0
        if not root.children:
            return 1
        depth = 1 + max(self.maxDepth(child) for child in root.children)
        return depth

没有使用list,很简洁

"""
# Definition for a Node.
class Node(object):
    def __init__(self, val, children):
        self.val = val
        self.children = children
"""
class Solution(object):
    def maxDepth(self, root):
        """
        :type root: Node
        :rtype: int
        """
        if not root: return 0
        depth = 0
        que = collections.deque()
        que.append(root)
        while que:
            size = len(que)
            for i in range(size):
                node = que.popleft()
                for child in node.children:
                    que.append(child)
            depth += 1
        return depth

使用了队列,层序遍历记录层数

原文地址:https://www.cnblogs.com/captain-dl/p/10140284.html