层序遍历
题目链接:LeetCode - The World's Leading Online Programming Learning Platform
题目链接/文章讲解/视频讲解:代码随想录
解题思路:
层序遍历 使用queue 若queue里有值就可以遍历 每次遍历时要注意遍历次数是当前queue的size也就是当前层数的size 当遍历时取出值时要并判断是否有左右子树并append进queue 遍历完一层就放入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 levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return
from collections import deque
que=deque()
que.append(root)
reses=[]
while que:
size=len(que)
res=[]
for i in range(size):
node = que.popleft()
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
res.append(node.val)
reses.append(res)
return reses
226.翻转二叉树 (优先掌握递归)
题目链接:LeetCode - The World's Leading Online Programming Learning Platform
题目链接/文章讲解/视频讲解:代码随想录
解题思路:
此题使用递归 只能用中左右 或者 左右中的顺序
先翻转中的左右子树 递归翻转左子树 最后递归翻转右子树
# 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
"""
if not root:
return
root.left,root.right=root.right,root.left
self.invertTree(root.left)
self.invertTree(root.right)
return root
101. 对称二叉树 (优先掌握递归)
题目链接:LeetCode - The World's Leading Online Programming Learning Platform
题目链接/文章讲解/视频讲解:代码随想录
解题思路:
设置递归比较左右子树
首先排除空节点的情况 左右为空 return ture 其他都return false 数值不同也return false。如果数值相同进入下一层递归 先判断外侧的子树 左边的左边和右边的右边 然后递归判断内侧的子树 return两个结果的合并。
# 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
"""
if not root:
return
def compare(left,right):
if left is None and right is None:
return True
elif left is None and right is not None:
return False
elif left is not None and right is None:
return False
elif left.val != right.val:
return False
outside=compare(left.left,right.right)
inside=compare(left.right,right.left)
return outside and inside
return compare(root.left,root.right)