bfs
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if root is None: return []
res = []
queue = [root]
while queue:
res.append([node.val for node in queue])
ll = []
for node in queue:
if node.left:
ll.append(node.left)
if node.right:
ll.append(node.right)
queue = ll
return res
反转list: list.reverse()
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if root is None: return []
res = []
queue = [root]
while queue:
res.append([node.val for node in queue])
ll = []
for node in queue:
if node.left:
ll.append(node.left)
if node.right:
ll.append(node.right)
queue = ll
res.reverse()
return res
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
queue = [root]
res = []
while queue:
res.append([node.val for node in queue][-1])
ll = []
for node in queue:
if node.left:
ll.append(node.left)
if node.right:
ll.append(node.right)
queue = ll
return res
class Solution:
def averageOfLevels(self, root: Optional[TreeNode]) -> List[float]:
if not root:
return None
res = []
queue = [root]
while queue:
l = [node.val for node in queue]
res.append(sum(l)/len(l))
ll = []
for node in queue:
if node.left:
ll.append(node.left)
if node.right:
ll.append(node.right)
queue = ll
return res
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def levelOrder(self, root: 'Node') -> List[List[int]]:
if not root:
return []
res = []
queue = [[root]]
while queue:
one = []
for nodes in queue:
for node in nodes:
one.append(node.val)
res.append(one)
ll = []
for nodes in queue:
for node in nodes:
if node.children:
ll.append(node.children)
queue = ll
return res
# 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
class Solution:
def largestValues(self, root: Optional[TreeNode]) -> List[int]:
res = []
if not root:
return res
queue = [root]
while queue:
res.append(max([node.val for node in queue]))
ll = []
for node in queue:
if node.left:
ll.append(node.left)
if node.right:
ll.append(node.right)
queue = ll
return res
"""
# 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
"""
class Solution:
def connect(self, root: 'Optional[Node]') -> 'Optional[Node]':
if not root:
return None
queue = [root]
while queue:
one = [node for node in queue]
for i in range(len(one)):
if i != len(one)-1:
one[i].next = one[i+1]
ll = []
for node in queue:
if node.left:
ll.append(node.left)
if node.right:
ll.append(node.right)
queue = ll
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
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
if root is None: return 0
res = []
queue = [root]
while queue:
res.append([node.val for node in queue])
ll = []
for node in queue:
if node.left:
ll.append(node.left)
if node.right:
ll.append(node.right)
queue = ll
return len(res)
# 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
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
# 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
if root is None: return 0
res = 0
queue = [root]
while queue:
res += 1
ll = []
for node in queue:
if node.left:
ll.append(node.left)
if node.right:
ll.append(node.right)
if node.left is None and node.right is None:
return res
queue = ll
return res
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def invertTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
res = []
queue = [root]
if root is None:
return root
while queue:
for node in queue:
tmp = node.left
node.left = node.right
node.right = tmp
ll = []
for node in queue:
if node.left:
ll.append(node.left)
if node.right:
ll.append(node.right)
queue = ll
return root
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
def isSymmetric(self, root: TreeNode) -> bool:
if not root:
return True
return self.compare(root.left, root.right)
def compare(self, left, right):
if left == None and right != None: return False
elif left != None and right == None: return False
elif left == None and right == None: return True
elif left.val != right.val: return False
outside = self.compare(left.left, right.right)
inside = self.compare(left.right, right.left)
isSame = outside and inside
return isSame