LeetCode : 104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3
思路: 二叉树的深度,DFS+BFS 实现, DFS递归 + BFS 迭代层次实现
定义并创建二叉树:
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def Create_tree(root,list,i):
if i<len(list):
if not list[i]: return None
else:
root=TreeNode(list[i])
root.left=Create_tree(root.left,list,i*2+1)
root.right=Create_tree(root.right,list,i*2+2)
return root
return root
DFS实现:
class Solution:
# DFS
def maxDepth(self, root: TreeNode) -> int:
if not root: return 0
return 1+max(self.maxDepth(root.left), self.maxDepth(root.right))
BFS实现:
# BFS
def maxDepth2(self,root: TreeNode) -> int:
if not root: return 0
cur_level=[root]
res = 0
while cur_level:
next_level=[]
res +=1
for node in cur_level:
if node.left:
next_level.append(node.left)
if node.right:
next_level.append(node.right)
cur_level = next_level
return res
测试代码:
if __name__ =="__main__":
s = Solution()
nums=[5,4,8,11,None,13,4,7,2,None,None,None,None,5,1]
root = Create_tree(None,nums,0)
r=s.maxDepth2(root)
print(r)