二叉树的构造方法:
1.递归方法:
class Node(): def __init__(self,value=None): self.lchild=None self.rchild=None self.value=value class Bitree(): def __init__(self): self.root=None #采用递归方法 def add(self,data,node): if not self.root: self.root=Node(data) return if data<node.value: if not node.lchild: node.lchild=Node(data) return node else: return self.add(data,node.lchild) else: if not node.rchild: node.rchild=Node(data) return node else: return self.add(data,node.rchild)
2.采用队列方法:
#采用队列方法 def add(self,data): if not self.root: self.root=Node(data) return queue=[self.root] while 1: node=queue.pop() if data < node.value: if not node.lchild: node.lchild = Node(data) return else: queue.append(node.lchild) else: if not node.rchild: node.rchild = Node(data) return else: queue.append(node.rchild)
3.前序中序后序遍历方法:
# 前序遍历,根,左右 def front_travel(self, node): if not node: return self.data_list.append(node.value) if node.lchild: self.front_travel(node.lchild) if node.rchild: self.front_travel(node.rchild) # 中序遍历,左根右 def middle_travel(self, node): if not node: return self.middle_travel(node.lchild) self.data_list.append(node.value) if node.rchild: self.middle_travel(node.rchild) # 后序遍历,右左根 def rear_travel(self, node): if not node: return self.rear_travel(node.rchild) if node.lchild: self.rear_travel(node.lchild) self.data_list.append(node.value)
4.将数据添加到二叉树模型中,备注数据必须有序,无序数据会导致二叉树左右枝干不对称
#数据data必须为有序,才能添加二叉树 def add_module(self,data): lengtht=len(data) if not lengtht: return mid=lengtht//2 self.add(data[mid]) self.add_module(data[:mid]) self.add_module(data[mid+1:])