深度优先搜索(Depth First Search):
前序遍历:
class BinaryTree:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
btree = BinaryTree(3)
btree.left = BinaryTree(4)
btree.right = BinaryTree(5)
btree.left.right = BinaryTree(6)
btree.right.left = BinaryTree(9)
def preorder_traversal(node, res=list()):
if node is None:
return
res.append(node.value)
preorder_traversal(node.left)
preorder_traversal(node.right)
return res
print(preorder_traversal(btree))
中序遍历:
class BinaryTree:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
btree = BinaryTree(3)
btree.left = BinaryTree(4)
btree.right = BinaryTree(5)
btree.left.right = BinaryTree(6)
btree.right.left = BinaryTree(9)
def inorder_traversal(node, res=list()):
if node is None:
return
inorder_traversal(node.left)
res.append(node.value)
inorder_traversal(node.right)
return res
print(inorder_traversal(btree))
后序遍历:
class BinaryTree:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
btree = BinaryTree(3)
btree.left = BinaryTree(4)
btree.right = BinaryTree(5)
btree.left.right = BinaryTree(6)
btree.right.left = BinaryTree(9)
def postorder_traversal(node, res=list()):
if node is None:
return
postorder_traversal(node.left)
postorder_traversal(node.right)
res.append(node.value)
return res
print(postorder_traversal(btree))
广度优先搜索(Breadth First Search):
层次遍历:
class BinaryTree:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
btree = BinaryTree(3)
btree.left = BinaryTree(4)
btree.right = BinaryTree(5)
btree.left.right = BinaryTree(6)
btree.right.left = BinaryTree(9)
def level_traversal(node):
if node is None:
return
res = list()
tmp_queue = list()
tmp_queue.append(node)
while tmp_queue:
node = tmp_queue.pop(0)
res.append(node.value)
if node.left is not None:
tmp_queue.append(node.left)
if node.right is not None:
tmp_queue.append(node.right)
return res
print(level_traversal(btree))