Python實現樹結構的兩種方式

2021-10-21 21:09:18 字數 2641 閱讀 6074

1 實現樹結構的列表方法是:巢狀列表法

這裡把我踩的坑記錄一下

'''

使用巢狀列表法實現樹的基本功能

'''def

binarytree

(r):

return

[r,,

]def

insertleft

(root, newbranch)

: t = root.pop(1)

iflen

(t)>1:

# 如果左子樹非空,就把原來根節點上的左子樹作為新的根的左節點的左子樹

root.insert(1,

[newbranch, t,

])else

:# 如果左子樹為空,就直接插入新的樹作為根節點的左子樹

root.insert(1,

[newbranch,

,])return root

definsertright

(root, newbranch)

: t = root.pop(2)

iflen

(t)>1:

root.insert(2,

[newbranch,

, t]

)else

: root.insert(2,

[newbranch,

,])return root

defgetrootval

(root)

:return root[0]

defsetrootval

(root, newval)

: root[0]

= newval

defgetleftchild

(root)

:return root[1]

defgetrightchild

(root)

:return root[2]

r = binarytree(3)

insertleft(r,4)

insertleft(r,5)

insertright(r,6)

insertright(r,7)

l = getleftchild(r)

print

(l)print

(r)

這裡需要強調的是,當在一棵樹中插入新的節點或者分支時,應該首先要明確的是新的節點或分支的根是誰,這是插入任何節點或分支的先決條件,一般來說,不會一直往根節點插入新的節點或分支。

2 實現樹結構的第二種方法是使用鍊錶

'''

用節點鏈結法實現樹

每個節點儲存根節點的資料項,以及指向左右子樹的鏈結

'''class

binarytree

:def

__init__

(self, rootobj)

:# 成員key儲存夠根節點資料項

# 成員left/rightchild儲存指向左/右子樹的引用(同樣是binarytree)

self.key = rootobj

self.leftchild =

none

self.rightchild =

none

definsertleft

(self, newnode)

:if self.leftchild ==

none

: self.leftchild = binarytree(newnode)

else

: t = binarytree(newnode)

t.leftchild = self.leftchild

self.leftchild = t

definsertright

(self, newnode)

:if self.rightchild ==

none

: self.rightchild = binarytree(newnode)

else

: t = binarytree(newnode)

t.rightchild = self.rightchild

self.rightchild = t

defgetrightchild

(self)

:return self.rightchild

defgetleftchild

(self)

:return self.leftchild

defsetrootval

(self, obj)

: self.key = obj

defgetrootval

(self)

:return self.key

r = binarytree(

'a')

r.insertleft(

'b')

r.insertright(

'c')

r.getrightchild(

).setrootval(

'hello'

)r.getleftchild(

).insertright(

'd')

redis hash 結構實現的兩種方式

壓縮列表是 redis 資料型別為 list 和 hash 的底層實現之一。壓縮列表是 redis 為了節約記憶體而開發的,它是由連續記憶體塊組成的順序型資料結構,有點類似於陣列。壓縮列表除了查詢複雜度高的問題,壓縮列表在插入元素時,如果記憶體空間不夠了,壓縮列表還需要重新分配一塊連續的記憶體空間,...

python實現10進製轉換2進製(兩種方法)

兩種方式 1 定義函式實現 整數除二,餘數進棧 2 用python內建函式bin 實現 一 用棧來實現10進製轉2進製 用函式實現十進位制與二進位制的轉換 deftentotwo number 定義棧 s binstring while number 0 餘數進棧 rem number 2 numb...

Python實現「合併兩個有序鍊錶」的兩種方法

合併兩個有序鍊錶,並返回乙個新的鍊錶。新煉表由前兩個鍊錶拼接而成。example input 1 2 4,1 3 4 output 1 1 2 3 4 4 definition for singly linked list.class listnode object def init self,x ...