赞
踩
目录
思想:首先将根节点入队列,在每次循环中,记录当前层的节点个数,然后依次弹出队列中的节点,并将其值添加到当前层的列表。如果节点存在左孩子,将左孩子入队列;如果节点存在右孩子,将右孩子入队列。最后,将当前层的结果添加到结果列表中,并重复此过程直到队列为空
- class TreeNode:
- def __init__(self, val=0, left=None, right=None):
- self.val = val
- self.left = left
- self.right = right
-
- def levelOrder(root):
- # 如果根节点为空,则返回空列表
- if not root:
- return []
-
- result = []
- # 使用队列来进行层次遍历,将根节点入队列
- queue = [root]
-
- while queue:
- # level_size:当前层的节点个数
- level_size = len(queue)
- # current_level:存储当前层节点值的列表
- current_level = []
- # 遍历当前层的节点
- for i in range(level_size):
- # 弹出队列中的第一个节点,并且将将节点值添加到当前层列表current_level中
- node = queue.pop(0)
- current_level.append(node.val)
- # 层次遍历是从左到右的,先判断是否有左孩子
- if node.left:
- queue.append(node.left)
- if node.right:
- queue.append(node.right)
- # 遍历完一层加到结果中
- result.append(current_level)
-
- return result
-
- # 创建一个二叉树
- root = TreeNode(1)
- root.left = TreeNode(2)
- root.right = TreeNode(3)
- root.right.left = TreeNode(4)
- root.right.right = TreeNode(5)
- # 进行层次遍历
- result = levelOrder(root)
- print(result) # 输出 [[1], [2, 3], [4, 5]]
修改:假设第一层是第0层,奇数层从左向右,偶数层从右向左遍历
思想:在遍历过程中使用 is_odd_level 变量来表示当前层是否为奇数层,根据不同的情况选择并将其值添加到当前层的列表中,遍历完一层之后,翻转 is_odd_level 的值来切换到下一层
- # 奇数从左向右,偶数从右向左
-
- class TreeNode:
- def __init__(self, val=0, left=None, right=None):
- self.val = val
- self.left = left
- self.right = right
-
-
- def levelOrder(root):
- # 如果根节点为空,则返回空列表
- if not root:
- return []
-
- result = []
- # 使用队列来进行层次遍历,将根节点入队列
- queue = [root]
- # 标识位,判断当前层是否是奇数层
- is_odd_level = False
-
- while queue:
- # level_size:当前层的节点个数
- level_size = len(queue)
- # current_level:存储当前层节点值的列表
- current_level = []
- # 遍历当前层的节点
- for i in range(level_size):
- node = queue.pop(0)
- # 奇数层从左向右
- if is_odd_level:
- current_level.append(node.val)
- # 偶数层从右向左
- else:
- current_level.insert(0, node.val)
- if node.left:
- queue.append(node.left)
- if node.right:
- queue.append(node.right)
-
- # 遍历完一层加到结果中
- result.append(current_level)
- # 切换到下一层时,反转
- is_odd_level = not is_odd_level
- return result
-
- # 创建一个二叉树
- root = TreeNode(1)
- root.left = TreeNode(2)
- root.right = TreeNode(3)
- root.left.left = TreeNode(4)
- root.left.right = TreeNode(5)
- root.right.left = TreeNode(6)
- root.right.right = TreeNode(7)
- # 进行层次遍历
- result = levelOrder(root)
- print(result)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。