學習Python 第十三天

2021-09-11 02:20:48 字數 4342 閱讀 2603

二叉樹

一,名詞:根邊

樹葉(葉子):沒有兒子

兄弟:具有相同父親的節點

祖父和孫子

路徑路徑的長

深度(從根到該點)

高(從該點到葉子)

祖先 後裔

真祖先 真後裔

二,樹的實現

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...