python 資料結構與演算法 day05 二叉樹

2022-02-06 18:24:10 字數 1296 閱讀 2247

二叉樹:每個節點最多有兩個子節點(兩個度);

完全二叉樹: 除了最下面一層,其他層的節點數都是該層最大的節點數;

滿二叉樹:所有層的節點都是最大數目;

平衡二叉樹:任意兩個節點的度相差 不能超過1;

排序二叉樹:二叉樹節點中數的儲存都是按照原序列的順序來存的;

class

node(object):

"""建立乙個節點類

"""def

__init__

(self,item):

self.item=item #

建立的能掛在樹上的節點 得有乙個data資料域 還得有兩個左右節點指向左右子節點(因為實現的是二叉樹,每個節點最多兩個子節點)

self.lchild=none #

當前節點的左子節點

self.rchild=none #

當前節點的右子節點

class

tree(object):

"""構建二叉樹

"""def

__init__

(self):

self.root=none #

構建的一棵樹首先得有乙個根節點(就像鍊錶有乙個頭節點self.__head)

defadd(self,item):

"""實現二叉樹新增元素

"""node=node(item)

queue= #

佇列(把當前樹的所有節點都存放在佇列中,然後挨個取出佇列中的元素,判斷該節點的做右子節點是否都存在,不存在就掛在當前節點的相應自節點位置上)

if self.root is none: #

如果當前樹是乙個空樹 直接就把要新增的元素放在根節點上就好啦

self.root=node

return

#先把樹的根節點放在佇列中,也就是從根節點開始遍歷

while

queue:

cur_node=queue.pop(0) #

queue佇列存放的是當前樹所有節點(沒有被遍歷過的) 然後挨個取出節點,遍歷做右子節點

if cur_node.lchild is

none:

cur_node.lchild=node

return

else

:

if cur_node.rchild is

none:

cur_node.rchild=node

return

else

:tree=tree()

tree.add(2)

python資料結構與演算法

coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...

資料結構與演算法 python

元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...

python演算法與資料結構

若n1 n2 n3 1000,且n1平方 n2平方 n3平方 n1,n2,n3為自然數 求出所有n1 n2 n3可能的組合?n1 0 n2 0 n3 0 判斷n1 n2 n3是否等於1000,之後變n3 1,n3 2,n3 3,然後再變n2 那如果變為 n1 n2 n3 2000 了呢?思路1 實現...