class Tree:
class Node:
#初始化函数
def __init__(self, data=None, left=None, right=None):
self.data = data
self.left = left
self.right = right
#添加
def add(self, node):
#如果当前值比节点值大
if self.data > node.data:
if self.left is None:
#当前树左侧无数据,将节点赋值
self.left = node
else:
#当前树左侧有数据,将节点
self.left.add(node)
else:
if self.right is None:
self.right = node
else:
self.right.add(node)
#转成String
def __str__(self):
return "node:{0}".format(self.data)
#push方法
def push(self, link):
if self.left is not None:
self.left.push(link)
link.add(self)
if self.right is not None:
self.right.push(link)
#排序方法
def sort(self):
if self.left is not None:
self.left.sort()
print(self.data)
if self.right is not None:
self.right.sort()
#初始化方法
def __init__(self):
self.root = None
#添加
def add(self, data):
n = self.Node(data=data)
if self.root is None:
self.root = n
else:
self.root.add(n)
pass
#迭代器
def __iter__(self):
#创建线性列表
#返回
link = self.myLink()
#将数据存入link
self.pushDataToLink(link)
return link
#将数据存入link
def pushDataToLink(self, link):
self.root.push(link)
#内部链表对象
class myLink:
def __init__(self):
self.head = None
self.tail = None
#添加
def add(self, node):
if self.head is None:
self.head = node
else:
self.tail.right = node
self.tail = node
#next方法
def __next__(self):
n = self.head
if n is None:
#遇到空时,抛出异常
raise StopIteration
self.head = self.head.right
return n
#排序
def sort(self):
self.root.sort()
if __name__ == '__main__':
myTree = Tree()
myTree.add(17)
myTree.add(6)
myTree.add(45)
myTree.add(7)
myTree.add(12)
myTree.add(28)
myTree.add(14)
for i in myTree:
print(i)
#myTree.sort()
pass
python--使用oop实现二叉树、线性链表
最新推荐文章于 2022-11-02 18:42:56 发布