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