对于层序遍历:
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if root is None:
return []
ans = [] #最终的答案数组
cur = [root] #每层的根节点
while cur:
value = [] #存放当前层的节点值
nex = [] #存放当前层的子节点
for node in cur:
value.append(node.val)
if node.left: #如果左孩子在,就把左孩子放入nex
nex.append(node.left)
if node.right:#如果右孩子在,就把右孩子放入nex
nex.append(node.right)
cur = nex #更换当前层
ans.append(value) #该层节点值加入最终层
return ans
将cur和nex合并成一个队列,先进先出
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if root is None:
return []
ans = [] #最终的答案数组
q = deque([root])
while q:
vals = []
for _ in range(len(q)):
node = q.popleft()
vals.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
ans.append(vals)
return ans
class Solution:
def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if root is None:
return []
ans = []
q = deque([root])
even = False #是否是偶数层,奇数层不反转,偶数层反转
while q:
vals = []
for _ in range(len(q)):
node = q.popleft()
vals.append(node.val)
if node.left: q.append(node.left)
if node.right:q.append(node.right)
ans.append(vals if not even else vals[::-1])
even = not even #反转
return ans
解法一:层序遍历二叉树之后,返回最后一层的第一个节点
class Solution:
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
ans = [] #存放层序遍历
q = deque([root])
while q:
vals = []
for _ in range(len(q)):
node = q.popleft()
vals.append(node.val)
if node.left : q.append(node.left)
if node.right: q.append(node.right)
ans.append(vals)
return ans[-1][0]
解法二:从右往左的层序遍历二叉树,最后一个出队的节点就是所求节点
class Solution:
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
q = deque([root])
ans = -inf
while q:
node = q.popleft()
if node.right : q.append(node.right)
if node.left: q.append(node.left)
ans = node.val
return ans