PYTHON实现二叉树的层次遍历,先序遍历,中序遍历,后序遍历
程序员文章站
2022-06-17 19:53:18
...
介绍:
树是数据结构中非常重要的一种,主要的用途是用来提高查找效率,对于要重复查找的情况效果更佳,如二叉排序树、FP-树。另外可以用来提高编码效率,如哈弗曼树。
代码:
class Node(object):
"""节点类"""
def __init__(self, elem):
self.elem = elem
self.lchild = None
self.rchild = None
class Tree(object):
"""树类"""
def __init__(self):
self.root = None
def add(self, elem):
"""为树添加节点"""
node = Node(elem)
if self.root is None:
self.root = node
return
queue = [self.root]
'''队列来存储节点'''
while queue:
cur_node = queue.pop(0)
'''层次遍历,找到插入节点的位置'''
if cur_node.lchild is None:
cur_node.lchild = node
return
else:
queue.append(cur_node.lchild)
if cur_node.rchild is None:
cur_node.rchild = node
return
else:
queue.append(cur_node.rchild)
'''广度遍历'''
def breadth_travel(self):
if self.root is None:
return
queue = [self.root]
while queue:
cur_node = queue.pop(0)
print(cur_node.elem,end=' ')
if cur_node.lchild is not None:
queue.append(cur_node.lchild)
if cur_node.rchild is not None:
queue.append(cur_node.rchild)
'''先序遍历'''
def preorder(self,node):
if node is None:
return
print(node.elem,end=' ')
self.preorder(node.lchild)
self.preorder(node.rchild)
'''中序遍历'''
def inorder(self,node):
if node is None:
return
self.inorder(node.lchild)
print(node.elem,end=' ')
self.inorder(node.rchild)
'''后序遍历'''
def postorder(self, node):
if node is None:
return
self.postorder(node.lchild)
self.postorder(node.rchild)
print(node.elem,end=' ')
tree = Tree()
for i in range(10):
tree.add(i)
print("层次遍历:")
tree.breadth_travel()
print()
print("先序遍历:")
tree.preorder(tree.root)
print()
print("中序遍历:")
tree.inorder(tree.root)
print()
print("后序遍历:")
tree.postorder(tree.root)
运行结果:
推荐阅读
-
Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】
-
Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】
-
Python实现二叉树前序、中序、后序及层次遍历示例代码
-
Python利用前序和中序遍历结果重建二叉树的方法
-
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
-
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
-
[PHP] 算法-根据前序和中序遍历结果重建二叉树的PHP实现
-
Python实现二叉树前序、中序、后序及层次遍历示例代码
-
求二叉树的层序遍历 python版本
-
【算法】二叉树的前序、中序、后序、层序遍历和还原。