二叉樹
一,名詞:根邊
樹葉(葉子):沒有兒子
兄弟:具有相同父親的節點
祖父和孫子
路徑路徑的長
深度(從根到該點)
高(從該點到葉子)
祖先 後裔
真祖先 真後裔
二,樹的實現
class treenode():
def __init__(self,data,firstchild,nextsibling):
self.data = data
self.firstchild = firstchild
self.nextsibling = nextsibling
三,樹的遍歷
深度優先
廣度優先
四,二叉樹
最多兩個孩子
五,二叉查詢樹(搜尋樹)
新增遍歷(深度優先)
遞迴
class treenode():
def __init__(self,data,left=none,right=none):
self.data = data
self.left = left
self.right = right
class tree():
def __init__(self):
self.root = none
#新增資料
def add(self,data):
node = treenode(data)
if self.root == none:
self.root = node
else:
currentnode = self.root
while true:
if data < currentnode.data:
if currentnode.left==none:
currentnode.left = node
break
else:
currentnode = currentnode.left
continue
else:
if currentnode.right==none:
currentnode.right = node
break
else:
currentnode = currentnode.right
continue
#是否包含資料
def contains(self,data):
flag = false
if self.root==none:
print("空樹")
else:
currentnode = self.root
while true:
if currentnode.data==data:
flag = true
break
else:
if data < currentnode.data:
if currentnode.left == none:
break
currentnode = currentnode.left
else:
if currentnode.right == none:
break
currentnode = currentnode.right
return flag
#查詢最小值
def findmin(self):
temp_min = none
if self.root==none:
print("空樹")
else:
currentnode = self.root
while currentnode.left != none:
currentnode = currentnode.left
temp_min = currentnode.data
return temp_min
#查詢最大值
def findmax(self):
temp_max = none
if self.root == none:
print("空樹")
else:
currentnode = self.root
while currentnode.right != none:
currentnode = currentnode.right
temp_max = currentnode.data
return temp_max
#刪除def remove(self,root,data):
if self.contains(data):
#樹中有要刪除的資料
pre_currentnode = none
currentnode = root
while true:
if currentnode.data == data:
#1,葉子節點
if currentnode.left==none and currentnode.right==none:
del currentnode
break
#2,乙個孩子的節點
elif currentnode.left==none and currentnode.right!=none:
if pre_currentnode==none:
self.root = currentnode.right
break
else:
if pre_currentnode.right == currentnode:
pre_currentnode.right = currentnode.right
else:
pre_currentnode.left = currentnode.right
break
elif currentnode.left != none and currentnode.right == none:
if pre_currentnode == none:
self.root = currentnode.left
break
else:
if pre_currentnode.right == currentnode:
pre_currentnode.right = currentnode.left
else:
pre_currentnode.left = currentnode.left
break
#3,兩個孩子的節點
else:
minnode = currentnode.right
while minnode.left != none:
minnode = minnode.left
currentnode.data = minnode.data
self.remove(currentnode.right,minnode.data)
break
else:
if data < currentnode.data:
pre_currentnode = currentnode
currentnode = currentnode.left
else:
pre_currentnode = currentnode
currentnode = currentnode.right
else:
#樹中沒有要刪除的資料
print("資料不存在")
#遍歷(深度優先)
def showall(self,root):
if root==none:
print("空樹")
else:
if self.root.data==root.data:
print(self.root.data)
if root.left!=none:
print(root.left.data)
self.showall(root.left)
if root.right!=none:
print(root.right.data)
self.showall(root.right)
tree = tree()
tree.add(6)
tree.add(2)
tree.add(8)
tree.add(1)
tree.add(4)
tree.add(3)
tree.add(5)
tree.showall(tree.root)
python學習的第十三天
閉包 裝飾器 1閉包 closure 是函式式程式設計的重要的語法結構。閉包也是一種組織 的結構,它同樣提高了 的可重複使用性。如果在乙個內嵌函式裡,對在外部函式內 但不是在全域性作用域 的變數進行引用,那麼內嵌函式就被認為是閉包 closure 定義在外部函式內但由內部函式引用或者使用的變數稱為自...
PYTHON小白 第十三天
python小白 第十三天 1 類和物件 類是物件導向的重要內容,可以把類當成一種自定義型別,可以使用類來定義變數,也可以使用類來建立物件。1.1 定義類 在物件導向的程式設計過程中有兩個重要概念 類 class 和物件 object,也被稱為例項,instance 其中類是某一批物件的抽象,可以把...
Java學習第十三天
13.01 常見物件 stringbuffer類的概述 b stringbuffer和string的區別 13.02 常見物件 stringbuffer類的構造方法 b stringbuffer的方法 c 案例演示 13.03 常見物件 stringbuffer的新增功能 public string...