代码随想录刷题第十五天
学习掌握二叉树如何遍历(递归法), 层序遍历
二叉树的层序遍历 (LC 102)
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
题目思路:
层序遍历使用队列+size的方法记录每一层的数值并弹出对应的数量,具体如下:
代码实现
# 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 levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if root is None:
return []
que = deque([root])
size = 1
res = []
while que:
level = []
#遍历一层
while size !=0:
cur = que.popleft()
if cur.left is not None:
que.append(cur.left)
if cur.right is not None:
que.append(cur.right)
level.append(cur.val)
size-=1
#一层遍历完
size = len(que)
res.append(level)
return res
二叉树的右视图 (LC 199) 层序遍历的应用
在层序遍历的过程中只需要寻找每一层最右边数值
class Solution(object):
def rightSideView(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if root is None:
return []
que = deque([root])
size = 1
res = []
while que:
while size>0:
cur = que.popleft()
if cur.left is not None:
que.append(cur.left)
if cur.right is not None:
que.append(cur.right)
if size == 1:
res.append(cur.val)
size-=1
size = len(que)
return res
翻转二叉树 (LC 226)
题目思路:
代码实现:
class Solution(object):
def invertTree(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
if root is None:
return None
root.left, root.right = root.right, root.left
self.invertTree(root.left)
self.invertTree(root.right)
return root
对称二叉树 (LC 101)
题目思路:
代码实现
class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
res = self.compare(root.left, root.right)
return res
def compare(self, left, right):
if left is None and right is not None:
return False
elif left is not None and right is None:
return False
elif left is None and right is None:
return True
else:
if left.val != right.val:
return False
else:
outside = self.compare(left.left, right.right)
inside = self.compare(left.right, right.left)
return outside and inside