数据结构-5(二叉树)
一、思维导图(相关概念)
二、遍历
def prior_show(self, node):"""先序遍历、根左右"""if node is not None:print(node.data, end=" ")self.prior_show(node.lchild)self.prior_show(node.rchild)def mid_show(self, node):"""中序遍历、左根右"""if node is not None:self.mid_show(node.lchild)print(node.data, end=" ")self.mid_show(node.rchild)def post_show(self, node):"""后序遍历、左 右 根"""if node is not None:self.post_show(node.lchild)self.post_show(node.rchild)print(node.data, end=" ")
三、二叉树的初始化以及树的创建
class Node():def __init__(self, data, lchild=None, rchild=None):self.data = dataself.lchild = lchildself.rchild = rchildclass Tree():def __init__(self, root=None):self.root = root # 根节点self.index = 0 # 用于遍历一串数据的索引def tree_creat(self, data_str):if self.index >= len(data_str): # 最大条件,数据读取完之后直接返回return None# 开始创建,开始之前先读取对应的数据并且后移indexdata = data_str[self.index]self.index += 1# 开始递归,先写一个可以终止递归的目标条件if data == "#": # 终止递归的条件:直到没有左or右子树return Nonenode = Node(data)node.lchild = self.tree_creat(data_str) # 当满足终止递归的条件时触发return None才能进一步往下走走到return node开始逐步往回收递归函数,并向父函数返回nodenode.rchild = self.tree_creat(data_str)return node
四、完整代码
class Node():def __init__(self, data, lchild=None, rchild=None):self.data = dataself.lchild = lchildself.rchild = rchildclass Tree():def __init__(self, root=None):self.root = root # 根节点self.index = 0 # 用于遍历一串数据的索引def tree_creat(self, data_str):if self.index >= len(data_str): # 最大条件,数据读取完之后直接返回return None# 开始创建,开始之前先读取对应的数据并且后移indexdata = data_str[self.index]self.index += 1# 开始递归,先写一个可以终止递归的目标条件if data == "#": # 终止递归的条件:直到没有左or右子树return Nonenode = Node(data)node.lchild = self.tree_creat(data_str) # 当满足终止递归的条件时触发return None才能进一步往下走走到return node开始逐步往回收递归函数,并向父函数返回nodenode.rchild = self.tree_creat(data_str)return nodedef prior_show(self, node):"""先序遍历、根左右"""if node is not None:print(node.data, end=" ")self.prior_show(node.lchild)self.prior_show(node.rchild)def mid_show(self, node):"""中序遍历、左根右"""if node is not None:self.mid_show(node.lchild)print(node.data, end=" ")self.mid_show(node.rchild)def post_show(self, node):"""后序遍历、左 右 根"""if node is not None:self.post_show(node.lchild)self.post_show(node.rchild)print(node.data, end=" ")if __name__ == '__main__':# data_str = input("输入二叉树:")data_str = "ABD##E##CFH###G##"# 创建二叉树tree = Tree()tree.root = tree.tree_creat(data_str)# 遍历print("先序遍历结果")tree.prior_show(tree.root)print()print("中序遍历结果")tree.mid_show(tree.root)print()print("后序遍历结果")tree.post_show(tree.root)print()# ABD##E##CFH###G##