树的遍历(也称为树的搜索)是图的遍历的一种,指的是按照某种规则,不重复地访问某种树的所有节点的过程。具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的
前序遍历:F, B, A, D, C, E, G, I, H.
中序遍历:A, B, C, D, E, F, G, H, I.
后序遍历:A, C, E, D, B, H, I, G, F.
层次遍历:F, B, G, A, D, I, C, E, H.
class TreeNode(object):
def __init__(self,value):
self.value=value
self.left=None
self.right=None
def insert(self,value):
"""
二叉排序树添加节点
"""
if self.value:
if value <self.value:
if self.left is None:
self.left=TreeNode(value)
else:
self.left.insert(value)
elif value>self.value:
if self.right is None:
self.right=TreeNode(value)
else:
self.right.insert(value)
else:
self.value=value
def preTraversal(self,root):
"""
前序遍历 root->left->right
"""
res=[]
if root:
# print(root.value)
res.append(root.value)
res=res+self.preTraversal(root.left)
res=res+self.preTraversal(root.right)
return res
def midTraversal(self,root):
"""
中序遍历 left->root->right
"""
res=[]
if root:
res=res+self.midTraversal(root.left)
# print(root.value)
res.append(root.value)
res=res+self.midTraversal(root.right)
return res
def postTraversal(self,root):
"""
后序遍历 left->right->root
"""
res=[]
if root:
res=res+self.postTraversal(root.left)
res=res+self.postTraversal(root.right)
# print(root.value)
res.append(root.value)
return res
def levelTraversel(self,root):
res=[]
if root is None:
return
queue=[]
queue.append(root)
while queue:
node=queue.pop(0)
res.append(node.value)
if node.left!=None:
queue.append(node.left)
if node.right!=None:
queue.append(node.right)
return res
if __name__ == "__main__":
root=TreeNode(27)
root.insert(14)
root.insert(35)
root.insert(10)
root.insert(19)
root.insert(31)
root.insert(42)
print("前序遍历:")
print(root.preTraversal(root))
print("中序遍历:")
print(root.midTraversal(root))
print("后序遍历:")
print(root.postTraversal(root))
print("层次遍历:")
print(root.levelTraversel(root))
输出结果:
前序遍历:
[27, 14, 10, 19, 35, 31, 42]
中序遍历:
[10, 14, 19, 27, 31, 35, 42]
后序遍历:
[10, 19, 14, 31, 42, 35, 27]
层次遍历:
[27, 14, 35, 10, 19, 31, 42]