class BinaryTree: def __init__(self,data=None): self.data = data #数据域data默认为None,data为一颗空树 self.lchild = None self.rchild = None def create_bitree(self): #创建二叉树 # 按先序次序输入二叉数中结点的值(一个字符),创建二叉链表表示的二叉树 ch = input() if ch == "#" : #递归结束,建空树 self.data = None else: #递归建立创建二叉树 self.data = ch self.lchild = BinaryTree()#当前结点创建一个空的左子数 self.lchild.create_bitree()#递归创建左子数 self.rchild = BinaryTree() self.rchild.create_bitree() def in_order_traverse(self): #中序遍历二叉树的递归算法 if self.data is not None: self.lchild.in_order_traverse()# 递归中序遍历左子树 print(self.data) self.rchild.in_order_traverse() def in_order_traverse_nonre(self): stack = [] p = self while p.data is not None or stack: if p.data is not None: #非空 stack.append(p)#根指针进栈 p = p.lchild else: q = stack.pop() print(q.data) p = q.rchild def copy(t): #复制二叉树 if t.data is None: tree = BinaryTree else: tree = BinaryTree(t.data)#复制根节点 tree.lchild = copy(t.lchild)#递归复制左子树 tree.rchild = copy(t.rchild)#递归复制右子树 return tree def deph(t): if t.data is None: return 0 else: return 1 + max(deph(t.lchild), deph(t.rchild)) def node_count(t): if t.data is None: return 0 else: return 1+ node_count(t.lchild)+node_count(t.rchild) if __name__=="__main__": tree=BinaryTree() print("请输入二叉树各节点的值(#表示空结点),每输入一个值按回车换行") tree.create_bitree() new_tree=copy(tree) print('复制得到的新树的中序序列(非递归):') new_tree.in_order_traverse() print("复制得到的新树的中序序列(递归):") new_tree.in_order_traverse_nonre() print('新的深度为:') print(deph(new_tree)) print('新数的结点数为:') print(node_count(new_tree))
数据结构 算法 python 为啥在输入之后无法输出结果呢
最新推荐文章于 2024-08-16 18:55:06 发布