节点类
class Node:
def __init__(self, elem=-1, lchild=None, rchild=None):
self.elem = elem
self.lchild = lchild
self.rchild = rchild
树类初始化
class Tree:
def __init__(self, root=None):
self.root = root
self.queue = []
树类插入节点
def insert_node(self, node):
new_node = Node(node)
if self.root is None:
self.root = new_node
self.queue.append(new_node)
else:
tree_node = self.queue[0]
if tree_node.lchild is None:
tree_node.lchild = new_node
self.queue.append(new_node)
else:
tree_node.rchild = new_node
self.queue.append(new_node)
self.queue.pop(0)
树类前序、中序、后序递归遍历
def front_digui(self, root):
"""利用递归实现树的先序遍历"""
if root is None:
return
print(root.elem, end="")
self.front_digui(root.lchild)
self.front_digui(root.rchild)
def middle_digui(self, root):
"""利用递归实现树的中序遍历"""
if root is None:
return
self.middle_digui(root.lchild)
print(root.elem, end="")
self.middle_digui(root.rchild)
def later_digui(self, root):
"""利用递归实现树的后序遍历"""
if root is None:
return
self.later_digui(root.lchild)
self.later_digui(root.rchild)
print(root.elem, end="")
主函数
if __name__ == '__main__':
tree = Tree()
tree.insert_node(1)
tree.insert_node(2)
tree.insert_node(3)
tree.insert_node(4)
tree.insert_node(5)
tree.insert_node(6)
tree.front_digui(tree.root)
print("---前序")
tree.middle_digui(tree.root)
print("---中序")
tree.later_digui(tree.root)
print("---后序")
完整代码
class Node:
def __init__(self, elem=-1, lchild=None, rchild=None):
self.elem = elem
self.lchild = lchild
self.rchild = rchild
class Tree:
def __init__(self, root=None):
self.root = root
self.queue = []
def insert_node(self, node):
new_node = Node(node)
if self.root is None:
self.root = new_node
self.queue.append(new_node)
else:
tree_node = self.queue[0]
if tree_node.lchild is None:
tree_node.lchild = new_node
self.queue.append(new_node)
else:
tree_node.rchild = new_node
self.queue.append(new_node)
self.queue.pop(0)
def front_digui(self, root):
"""利用递归实现树的先序遍历"""
if root is None:
return
print(root.elem, end="")
self.front_digui(root.lchild)
self.front_digui(root.rchild)
def middle_digui(self, root):
"""利用递归实现树的中序遍历"""
if root is None:
return
self.middle_digui(root.lchild)
print(root.elem, end="")
self.middle_digui(root.rchild)
def later_digui(self, root):
"""利用递归实现树的后序遍历"""
if root is None:
return
self.later_digui(root.lchild)
self.later_digui(root.rchild)
print(root.elem, end="")
if __name__ == '__main__':
tree = Tree()
tree.insert_node(1)
tree.insert_node(2)
tree.insert_node(3)
tree.insert_node(4)
tree.insert_node(5)
tree.insert_node(6)
tree.front_digui(tree.root)
print("---前序")
tree.middle_digui(tree.root)
print("---中序")
tree.later_digui(tree.root)
print("---后序")
运行结果