给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
BFS,层次遍历最后得到的深度就是最大的深度
DFS与BFS有两点不同:
最后得到的深度不一定是最大深度,所以要用max判断
DFS(先序遍历)节点右孩子先入栈,左孩子再入栈`
class Solution:
def maxDepth(self, root: TreeNode) -> int:
# BFS
if root is None:
return 0
queue = [(1, root)]
while queue:
depth, node = queue.pop(0)
if node.left:
queue.append((depth+1,node.left))
if node.right:
queue.append((depth+1,node.right))
return depth
class Solution:
def maxDepth(self, root: TreeNode) -> int:
# DFS
if root is None:
return 0
stack = [(1, root)]
depth = 0
while stack:
cur_dep, node = stack.pop()
depth = max(depth, cur_dep)
if node.right:
stack.append((cur_dep+1,node.right))
if node.left:
stack.append((cur_dep+1,node.left))
return depth
递归+BFS
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if not root:
return 0
tmp, ret = [root], 1
while tmp:
ret, tmp = ret+1, sum([([i.left] if i.left else [])+([i.right] if i.right else []) for i in tmp], [])
return ret-1
递归+DFS
class Solution:
def maxDepth(self, root: TreeNode) -> int:
return 0 if not root else max(self.maxDepth(root.left), self.maxDepth(root.right))+1
解题思路
1,构建一个队列,然后把树放进去
2,利用队列的特性,一层一层读取树的元素,每读取一层,层数加1
3,直到所有层遍历完毕,输出层数
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if root == None:
return 0
stack = [root]
i = 0
while len(stack) != 0:
n = len(stack)
i += 1
# print(stack)
for k in range(n):
temp = stack.pop(0)
if temp.left:
stack.append(temp.left)
if temp.right:
stack.append(temp.right)
return i
来源:力扣(LeetCode)
网友评论