题目:
给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。
解答:
方法一:递归
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def maxDepth(self, root: 'Node') -> int:
if not root:
return 0
depth=1
for child in root.children:
depth=max(depth,self.maxDepth(child)+1)
return depth
方法二:迭代(队列,BFS层序遍历)
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def maxDepth(self, root: 'Node') -> int:
if not root:
return 0
que=[root]
res=0
while que:
res+=1
t=len(que)
for i in range(t):
cur=que.pop(0)
if cur.children:
que.extend(cur.children)
return res
方法三:迭代(栈,DFS后序遍历)
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def maxDepth(self, root: 'Node') -> int:
#使用后序遍历
if not root:
return 0
stack=[root]
depth = 0
result = 0
while stack:
node = stack[-1]
if node:
#stack.pop()
#stack.append(node)
stack.append(None)
depth+=1
for child in node.children: #处理孩子
stack.append(child)
else:
stack.pop()
node = stack.pop()
depth-=1
result = max(result, depth)
return result