树的遍历主要有两种,一种是深度优先遍历,像前序、中序、后序;另一种是广度优先遍历,像层次遍历。
深度优先一般用递归,广度优先一般用队列。
遍历结果保存到list
前序遍历 preorder_traversal(root)
中序遍历 inorder_traversal(root)
后序遍历 postorder_traversal(root)
层次遍历 level_traversal(root)
# Preorder traversal
# Root -> Left ->Right
def PreorderTraversal(self, root):
res = []
if root:
res.append(root.data)
res = res + self.PreorderTraversal(root.left)
res = res + self.PreorderTraversal(root.right)
return res
# Inorder traversal
# Left -> Root -> Right
def inorderTraversal(self, root):
res = []
if root:
res = self.inorderTraversal(root.left)
res.append(root.data)
res = res + self.inorderTraversal(root.right)
return res
# Postorder traversal
# Left ->Right -> Root
def PostorderTraversal(self, root):
res = []
if root:
res = self.PostorderTraversal(root.left)
res = res + self.PostorderTraversal(root.right)
res.append(root.data)
return res
# level traversal
def level_queue(self, root):
"""利用队列实现树的层次遍历"""
res = []
if root == None:
return res
myQueue = []
node = root
myQueue.append(node)
while myQueue:
node = myQueue.pop(0)
res.append(node.data)
if node.left != None:
myQueue.append(node.left)
if node.right != None:
myQueue.append(node.right)
return res
参考
https://codingdict.com/article/4853