求给定二叉树的最大深度,
深度是指树的根节点到任一叶子节点路径上节点的数量。
最大深度是所有叶子节点的深度的最大值。
(注:叶子节点是指没有子节点的节点。)
数据范围:,树上每个节点的val满足
要求: 空间复杂度 ,时间复杂度
要求: 空间复杂度 ,时间复杂度
class Solution: def maxDepth(self , root: TreeNode) -> int: if not root : return 0 count = 0 queue = [root] while queue: temp = [] count += 1 for node in queue: if node.left : temp.append(node.left) if node.right : temp.append(node.right) queue = temp return count
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param root TreeNode类 # @return int整型 # class Solution: def maxDepth(self , root: TreeNode) -> int: if not root: return 0 depth=1 left = 0 right = 0 if root.left: left = self.maxDepth(root.left) if root.right: right = self.maxDepth(root.right) if left > right: return depth + left return depth + right
# 非递归,使用队列 import queue class Solution: def maxDepth(self , root: TreeNode) -> int: depth = 0 if not root: return depth q = queue.Queue() q.put(root) while not q.empty(): # 当前层的结点个数 n = q.qsize() for i in range(n): node = q.get() if node.left: q.put(node.left) if node.right: q.put(node.right) # 遍历完当前层后,深度+1 depth += 1 return depth
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param root TreeNode类 # @return int整型 # class Solution: def maxDepth(self , root: TreeNode) -> int: # write code here if root: return len(self.levelOrder(root)) else: return 0 def levelOrder(self , root: TreeNode) -> List[List[int]]: # write code here self.val_list=[] h=root # print(h) l=self.get_next_h(h) while l: l=self.get_next_hh(l) return self.val_list[:-1] def get_next_h(self,x): self.val_list.append([x.val]) return [x.left,x.right] def get_next_hh(self,x): l_r_list=[] val_one=[] for one in x: if one: val_one.append(one.val) if one.left: l_r_list.append(one.left) else: l_r_list.append(None) if one.right: l_r_list.append(one.right) else: l_r_list.append(None) self.val_list.append(val_one) return l_r_list
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param root TreeNode类 # @return int整型 # ##### wow感觉记住层序遍历,好多都可以在其结果上修改得到!这道题,将层序遍历的结果,返回len(res)就可以了。 ## 因为层序遍历是并且排列下来的,一行一行下来的。 class Solution: def maxDepth(self , root: TreeNode) -> int: # write code here res = [] def dfs(root, index): if not root : return None if len(res) < index: res.append([]) res[index-1].append(root.val) if root.left: dfs(root.left, index + 1) if root.right: dfs(root.right, index + 1) dfs(root, 1) return len(res) ##### 层序遍历的长度 为 二叉树的最大深度 maxDepth class Solution: def maxDepth(self , root: TreeNode) -> int: results = [] if not root: return 0 from collections import deque que = deque([root]) ## 先进 (每次都需要先进来的是 根节点!!!) while que: res = [] size = len(que) for _ in range(size): cur = que.popleft() ## 先出 res.append(cur.val) if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) results.append(res) return len(results)
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param root TreeNode类 # @return int整型 # class Solution: def maxDepth(self , root: TreeNode) -> int: # write code here n = 0 if root == None: return n else: left = self.maxDepth(root.left) right = self.maxDepth(root.right) n = max(left+1, right+1) return n
class Solution: def maxDepth(self , root: TreeNode) -> int: # write code here def pre_order(root): if not root: return 0 return 1+max(pre_order(root.left),pre_order(root.right)) return pre_order(root)
class Solution: def maxDepth(self , root ): # write code here if not root: return 0 return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # # @param root TreeNode类 # @return int整型 # class Solution: def maxDepth(self , root ): # write code here if root != None: return 1 + max(self.maxDepth(root.left),self.maxDepth(root.right)) else: return 0
class Solution: def maxDepth(self , root ): # write code here if not root: return 0 dl = self.maxDepth(root.left) dr = self.maxDepth(root.right) return max(dl, dr) + 1