class Node:
"""节点类"""
def __init__(self, elem=-1, lchild=None, rchild=None):
self.elem = elem # elem本身值
self.lchild = lchild # 左孩子
self.rchild = rchild # 右孩子
class Tree:
"""树类"""
def __init__(self):
self.root = None # 根节点
def add(self, elem):
"""为树添加节点"""
node = Node(elem)
"""如果树是空的,则对根节点赋值"""
if self.root == None:
self.root = node
else:
queue = [] # 队列
queue.append(self.root)
# 对已有的节点进行层次遍历
while queue:
# 弹出队列的第一个元素
cur = queue.pop(0)
if cur.lchild is None:
cur.lchild = node
return
else:
queue.append(cur.lchild)
if cur.rchild is None:
cur.rchild = node
return
else:
queue.append(cur.rchild)
def preorder(self, root):
"""递归实现先序遍历"""
# 根节点->左子树->右子树
if root is None:
return
print(root.elem, end=" ")
self.preorder(root.lchild)
self.preorder(root.rchild)
def inorder(self, root):
"""递归实现中序遍历"""
# 左子树->根节点->右子树
if root is None:
return
self.inorder(root.lchild)
print(root.elem, end=" ")
self.inorder(root.rchild)
def postorder(self, root):
"""递归实现后续遍历"""
# 左子树->右子树->根节点
if root is None:
return
self.postorder(root.lchild)
self.postorder(root.rchild)
print(root.elem, end=" ")
def breadth_travel(self):
"""利用队列实现树的层次遍历"""
if self.root is None:
return
queue = []
queue.append(self.root)
while queue:
node = queue.pop(0)
print(node.elem, end=" ")
if node.lchild != None:
queue.append(node.lchild)
if node.rchild != None:
queue.append(node.rchild)
二叉树
最新推荐文章于 2022-05-01 12:47:37 发布