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:".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實現二叉搜尋
二叉搜尋是在乙個有序的列表中,尋找目標元素。因此我們需要對半查詢即可。當目標元素比中間元素小,則在中間元素的左邊查詢 反之,則在目標元素的右邊查詢。直到左邊界比右邊界還要大停止查詢。def binarysearch target,arr right len arr 1 left 0 while le...
二叉查詢樹python實現
1.二叉查詢樹的定義 左子樹不為空的時候,左子樹的結點值小於根節點,右子樹不為空時,右子樹的結點值大於根節點,左右子樹分別為二叉查詢樹 2.二叉查詢樹的最左邊的結點即為最小值,要查詢最小值,只需遍歷左子樹的結點直到為空為止,同理,最右邊的結點結尾最大值,要查詢最大值,只需遍歷右子樹的結點直到為空為止...
python實現二叉搜尋樹
二叉搜尋樹 binary search tree 又名二叉排序樹 binary sort tree 二叉搜尋樹是具有有以下性質的二叉樹 1 若左子樹不為空,則左子樹上所有節點的值均小於或等於它的根節點的值。2 若右子樹不為空,則右子樹上所有節點的值均大於或等於它的根節點的值。3 左 右子樹也分別為二...