我幾乎完成了乙個專案,讓我們建立乙個字典類,利用二叉樹結構。然而,我一直糾結於如何實現乙個列印出樹中所有元素的方法,我只是對二進位制樹沒有太多的經驗,所以在如何對其進行編碼上相當混亂。
我試圖找出的方法是keys方法,它將遍歷整個樹並返回所有鍵的列表。我認識的人暗示我應該建立乙個私有的helper函式,它遞迴地遍歷樹並跟蹤所有的鍵。我想創造他所說的,但我根本不知道如何編碼。有人能幫我把這個編碼出來嗎?搞清楚這件事對我來說差不多就完了。
這是我目前的密碼。[key:value]對是元組。我已經對它進行了編碼,並從教科書示例中獲得了一些幫助來構建您在這裡看到的所有內容:class dictwithtree:
def __init__(self):
self._element = none
self._left = none
self._right = none
self._size = 0
def isempty(self):
if self._element == none:
return true
return false
def __len__(self):
return self._size
def __contains__(self,key):
path = self._tracepath(key)
return path[-1]._size > 0
def _tracepath(self,key): # taken from the textbook example and modified
if len(self) == 0 or key == self._element[0]:
return [self]
elif len(key) < len(self._element[0]):
return [self] + self._left._tracepath(key)
else:
return [self] + self._right._tracepath(key)
def __getitem__(self,key):
if len(self) == 0:
raise keyerror(key)
elif key == self._element[0]:
return self._element[1]
elif key < self._element[0]:
return self._left[key]
elif key > self._element[0]:
return self._right[key]
else:
raise keyerror(key)
def __setitem__(self,key,value):
path = self._tracepath(key)
endofpath = path[-1]
if endofpath._element != none:
if endofpath._element[0] == key:
endofpath._element = key,value
if endofpath._size == 0: # a new element
for location in path:
location._size += 1
endofpath._element = key,value
endofpath._left = dictwithtree()
endofpath._right = dictwithtree()
def clear(self):
self._element = none
self._left = none
self._right = none
self._size = 0
def pop(self,key):
value = self[key]
self._remove(key)
return value
def popitem(self): # returns the 'last' item in the dictionary,
if self.isempty(): # (i.e. the largest key in the dictionary)
return keyerror("there are no keys in the dictionary")
elif self._right._element == none:
return self._element
else:
return self._right.popitem()
def _remove(self,key):
path = self._tracepath(key)
endofpath = path[-1]
if endofpath._size > 0:
for location in path:
location._size -= 1
if len(endofpath._left) == 0:
endofpath._promotechild(endofpath._right)
elif len(endofpath._right) == 0:
endofpath._promotechild(endofpath._left)
else:
endofpath._element = endofpath._left.pop()
def _promotechild(self,child):
self._element = child._element
self._left = child._left
self._right = child._right
python遍歷二叉樹
定義二叉樹 class treenode def init self,x self.val x self.left none self.right none 構建二叉樹 返回構造的treenode根節點 defreconstructbinarytree self,pre,tin ifnot pre ...
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...
二叉樹遍歷
二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...