● 层序遍历
题目链接:102. 二叉树的层序遍历 - 力扣(LeetCode)
层序遍历的解释:层序遍历与图论中的深度遍历是相似的 一层一层的遍历 从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前的不太一样。而这种我们不能直接通过二叉树来实现,于是我们就借助队列,因为队列是先进先出,符合一层一层遍历的逻辑。
思路:我们创造一个queue队列 result用于记录结果 level用于层序遍历 用while queue来进行遍历
用for循环遍历queue 让cur等于queue左边弹出的 level里面加入cur.val 如果cur左边存在就让左边导入level 右边则右边导入level 然后将level的导入result
可以写出下面代码
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
queue=collections.deque([root])
if not root:
return []
result = []
while queue:
level = []
for i in range(len(queue)):
cur = queue.popleft()
level.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
result.append(level)
return result
● 226.翻转二叉树
题目链接:226. 翻转二叉树 - 力扣(LeetCode)
思路: 我们让 root.left,root.right=root.right,root.left 即可
代码
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. 对称二叉树 - 力扣(LeetCode)
思路:我们首先检查两边是否有空节点 然后检查两边节点的值是否相同 此时才做递归,做下一层的判断
代码
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