当前位置:   article > 正文

python实现二叉树层次遍历_python 二叉树层序遍历

python 二叉树层序遍历

目录

1、二叉树层次遍历

2、二叉树层次遍历进阶


1、二叉树层次遍历

思想:首先将根节点入队列,在每次循环中,记录当前层的节点个数,然后依次弹出队列中的节点,并将其值添加到当前层的列表。如果节点存在左孩子,将左孩子入队列;如果节点存在右孩子,将右孩子入队列。最后,将当前层的结果添加到结果列表中,并重复此过程直到队列为空

  1. class TreeNode:
  2. def __init__(self, val=0, left=None, right=None):
  3. self.val = val
  4. self.left = left
  5. self.right = right
  6. def levelOrder(root):
  7. # 如果根节点为空,则返回空列表
  8. if not root:
  9. return []
  10. result = []
  11. # 使用队列来进行层次遍历,将根节点入队列
  12. queue = [root]
  13. while queue:
  14. # level_size:当前层的节点个数
  15. level_size = len(queue)
  16. # current_level:存储当前层节点值的列表
  17. current_level = []
  18. # 遍历当前层的节点
  19. for i in range(level_size):
  20. # 弹出队列中的第一个节点,并且将将节点值添加到当前层列表current_level中
  21. node = queue.pop(0)
  22. current_level.append(node.val)
  23. # 层次遍历是从左到右的,先判断是否有左孩子
  24. if node.left:
  25. queue.append(node.left)
  26. if node.right:
  27. queue.append(node.right)
  28. # 遍历完一层加到结果中
  29. result.append(current_level)
  30. return result
  31. # 创建一个二叉树
  32. root = TreeNode(1)
  33. root.left = TreeNode(2)
  34. root.right = TreeNode(3)
  35. root.right.left = TreeNode(4)
  36. root.right.right = TreeNode(5)
  37. # 进行层次遍历
  38. result = levelOrder(root)
  39. print(result) # 输出 [[1], [2, 3], [4, 5]]

2、二叉树层次遍历进阶

修改:假设第一层是第0层,奇数层从左向右,偶数层从右向左遍历

思想:在遍历过程中使用 is_odd_level 变量来表示当前层是否为奇数层,根据不同的情况选择并将其值添加到当前层的列表中,遍历完一层之后,翻转 is_odd_level 的值来切换到下一层

  1. # 奇数从左向右,偶数从右向左
  2. class TreeNode:
  3. def __init__(self, val=0, left=None, right=None):
  4. self.val = val
  5. self.left = left
  6. self.right = right
  7. def levelOrder(root):
  8. # 如果根节点为空,则返回空列表
  9. if not root:
  10. return []
  11. result = []
  12. # 使用队列来进行层次遍历,将根节点入队列
  13. queue = [root]
  14. # 标识位,判断当前层是否是奇数层
  15. is_odd_level = False
  16. while queue:
  17. # level_size:当前层的节点个数
  18. level_size = len(queue)
  19. # current_level:存储当前层节点值的列表
  20. current_level = []
  21. # 遍历当前层的节点
  22. for i in range(level_size):
  23. node = queue.pop(0)
  24. # 奇数层从左向右
  25. if is_odd_level:
  26. current_level.append(node.val)
  27. # 偶数层从右向左
  28. else:
  29. current_level.insert(0, node.val)
  30. if node.left:
  31. queue.append(node.left)
  32. if node.right:
  33. queue.append(node.right)
  34. # 遍历完一层加到结果中
  35. result.append(current_level)
  36. # 切换到下一层时,反转
  37. is_odd_level = not is_odd_level
  38. return result
  39. # 创建一个二叉树
  40. root = TreeNode(1)
  41. root.left = TreeNode(2)
  42. root.right = TreeNode(3)
  43. root.left.left = TreeNode(4)
  44. root.left.right = TreeNode(5)
  45. root.right.left = TreeNode(6)
  46. root.right.right = TreeNode(7)
  47. # 进行层次遍历
  48. result = levelOrder(root)
  49. print(result)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/514808
推荐阅读
相关标签
  

闽ICP备14008679号