2022年 11月 5日

Python:二叉树遍历

二叉树遍历共有四种方法,分别是前序遍历、中序遍历、后序遍历和层次遍历。

前序遍历: 父节点——左孩子——右孩子

中序遍历:左孩子——父节点——右孩子

后序遍历:左孩子——右孩子——父节点

层次遍历:利用队列解决,父节点出队,左右孩子进队

  1. #二叉树遍历
  2. #建立二叉树
  3. from collections import deque
  4. class Tree():
  5. def __init__(self,data):
  6. self.data=data
  7. self.lchild=None
  8. self.rchild=None
  9. a=Tree("A")
  10. b=Tree("B")
  11. c=Tree("C")
  12. d=Tree("D")
  13. e=Tree("E")
  14. f=Tree("F")
  15. g=Tree("G")
  16. e.lchild=a
  17. e.rchild=g
  18. a.rchild=c
  19. c.lchild=b
  20. c.rchild=d
  21. g.rchild=f
  22. #第一种方法:前序遍历
  23. def pre_read(root):
  24. if root:
  25. print(root.data,end=' ')
  26. pre_read(root.lchild)
  27. pre_read(root.rchild)
  28. print("1.前序遍历")
  29. pre_read(e)
  30. ##第二种方法:中序遍历
  31. def mid_read(root):
  32. if root:
  33. mid_read(root.lchild)
  34. print(root.data,end=' ')
  35. mid_read(root.rchild)
  36. print("\n2.中序遍历")
  37. mid_read(e)
  38. #第三种方法:后序遍历
  39. def back_read(root):
  40. if root:
  41. back_read(root.lchild)
  42. back_read(root.rchild)
  43. print(root.data,end=' ')
  44. print("\n3.后序遍历")
  45. back_read(e)
  46. ##第四种方法:层次遍历
  47. ##利用队列解决,父节点出队,左右孩子进队】
  48. def cengci_read(root):
  49. queue=deque()
  50. if root:
  51. queue.append(root)
  52. while len(queue)>0:
  53. node=queue.popleft()
  54. print(node.data,end=' ')
  55. if node.lchild:
  56. queue.append(node.lchild)
  57. if node.rchild:
  58. queue.append(node.rchild)
  59. print("\n层次遍历")
  60. cengci_read(e)