1、二叉树的层序遍历
关于python中的双端队列collections.deque()
如果要初始化,需要是一个可迭代的对象collections.deque([root])等价于que = collections.deque()
que.append(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 levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:
return []
que = collections.deque()
result=[]
que.append(root)
while que:
level = []
for i in range(len(que)):
curr = que.popleft()
level.append(curr.val)
if curr.left:
que.append(curr.left)
if curr.right:
que.append(curr.right)
result.append(level)
return result
2、翻转二叉树
使用递归:
递归三部曲:确定函数参数及返回值,确定终止条件,确定单层步骤
# 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 invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return None
root.left ,root.right = root.right , root.left
self.invertTree(root.left)
self.invertTree(root.right)
return root
101对称二叉树
解题关键:对称二叉树要对比的是内侧和外侧。
遍历方法实际是后续遍历:左右中,先比较孩子,传递给中。
# 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 isSymmetric(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
else:
return self.compare(root.left,root.right)
def compare(self,left,right):
if left is None and right is not None:
return False
elif right is None and left is not None:
return False
elif right is None and left is None:
return True
elif right.val != left.val:
return False
outside = self.compare(left.left,right.right)
inside = self.compare(left.right,right.left)
result = outside and inside
return result