# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: defzigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: # 时间:On,遍历了整棵树,不过是层序遍历 # 空间:On,姑且也是会在最差的情况下,存储半个树节点到vals ifnot root: return [] cur = deque([root]) ans = [] even = False# 对于偶数行,做反转 while cur: vals = [] # print(cur, len(cur)) for _ inrange(len(cur)): node = cur.popleft() vals.append(node.val) if node.left: cur.append(node.left) if node.right: cur.append(node.right) if even: ans.append(vals[::-1]) else: ans.append(vals) even = not even return ans
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: defmaxDepth(self, root: Optional[TreeNode]) -> int: # 层序遍历解法: # 时间:遍历所有节点 On # 空间:Oh,h是树的高度 ifnot root: return0 cur = deque([root]) ans = 0 while cur: # print(cur, len(cur)) for _ inrange(len(cur)): node = cur.popleft() if node.left: cur.append(node.left) if node.right: cur.append(node.right) ans += 1 return ans
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: defminDepth(self, root: Optional[TreeNode]) -> int: # 层序遍历方法 # 时间:On,遍历了整棵树,不过是层序遍历 # 空间:On,姑且也是会在最差的情况下,存储半个树节点到vals ifnot root: return0 cur = deque([root]) ans = 0 end = False while cur andnot end: ans += 1 for _ inrange(len(cur)): node = cur.popleft() son_cnt = 0 if node.left: cur.append(node.left) son_cnt += 1 if node.right: cur.append(node.right) son_cnt += 1 if son_cnt == 0: # 找到第一个叶子节点就马上截断 end = True break return ans
""" # Definition for a Node. class Node: def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None): self.val = val self.left = left self.right = right self.next = next """
classSolution: defconnect(self, root: 'Optional[Node]') -> 'Optional[Node]': # 时间:On,遍历了整棵树,不过是层序遍历 # 空间:On,姑且也是会在最差的情况下,存储半个树节点到vals ifnot root: return root cur = deque([root]) # ans = [] while cur: # vals = [] # print(cur, len(cur)) connect_next_cnt = len(cur)-1# 由于确定是完美二叉树,所以每层要连接的数量就是比节点数量少1 for _ inrange(len(cur)): node = cur.popleft() # vals.append(node.val) if node.left: cur.append(node.left) if node.right: cur.append(node.right) if connect_next_cnt > 0: connect_next_cnt -= 1 node.next = cur[0] # ans.append(vals) return root
""" # Definition for a Node. class Node: def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None): self.val = val self.left = left self.right = right self.next = next """
classSolution: defconnect(self, root: 'Node') -> 'Node': # 时间:On,遍历了整棵树,不过是层序遍历 # 空间:On,姑且也是会在最差的情况下,存储半个树节点到vals ifnot root: return root cur = deque([root]) # ans = [] while cur: # vals = [] # print(cur, len(cur)) connect_next_cnt = len(cur)-1# 由于确定是完美二叉树,所以每层要连接的数量就是比节点数量少1 for _ inrange(len(cur)): node = cur.popleft() # vals.append(node.val) if node.left: cur.append(node.left) if node.right: cur.append(node.right) if connect_next_cnt > 0: connect_next_cnt -= 1 node.next = cur[0] # ans.append(vals) return root
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: defdeepestLeavesSum(self, root: Optional[TreeNode]) -> int: # 时间:On,遍历了整棵树,不过是层序遍历 # 空间:On,姑且也是会在最差的情况下,存储快半个树节点到cur ifnot root: return0 cur = deque([root]) ans = 0 while cur: vals = 0 # print(cur, len(cur)) for _ inrange(len(cur)): node = cur.popleft() vals += node.val if node.left: cur.append(node.left) if node.right: cur.append(node.right) ans = vals return ans
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: defisEvenOddTree(self, root: Optional[TreeNode]) -> bool: # 时间:On,遍历了整棵树,不过是层序遍历 # 空间:On,姑且也是会在最差的情况下,存储半个树节点到vals cur = deque([root]) # ans = True even = True# 这里是从0层开始 end = False while cur andnot end: vals = [] for _ inrange(len(cur)): node = cur.popleft() x = node.val if even: if x % 2 == 0: end = True break elif vals and x <= vals[-1]: end = True break else: if x % 2 == 1: end = True break elif vals and x >= vals[-1]: end = True break
vals.append(x) if node.left: cur.append(node.left) if node.right: cur.append(node.right) even = not even returnnot end # 如果有提前终止,就是相当于有不符合的地方