乙個資料結構面書題

2021-09-02 11:42:25 字數 1401 閱讀 3899

閱讀下面的**,它的輸出結果是什麼?

class node(object):

def __init__(self,sname):

self._lchildren =

self.sname = sname

def __repr__(self):

return "".format(self.sname)

def print_all_1(self):

print self

for ochild in self._lchildren:

ochild.print_all_1()

def print_all_2(self):

def gen(o):

lall = [o,]

while lall:

onext = lall.pop(0)

lall.extend(onext._lchildren)

yield onext

for onode in gen(self):

print onode

oroot = node("root")

ochild1 = node("child1")

ochild2 = node("child2")

ochild3 = node("child3")

ochild4 = node("child4")

ochild5 = node("child5")

ochild6 = node("child6")

ochild7 = node("child7")

ochild8 = node("child8")

ochild9 = node("child9")

ochild10 = node("child10")

# 說明下面**的輸出結果

oroot.print_all_1()

oroot.print_all_2()

答案oroot.print_all_1()會列印下面的結果:

oroot.print_all_1()會列印下面的結果:

為什麼提這個問題?

因為物件的精髓就在於組合(composition)與物件構造(object construction)。物件需要有組合成分構成,而且得以某種方式初始化。這裡也涉及到遞迴和生成器(generator)的使用。

生成器是很棒的資料型別。你可以只通過構造乙個很長的列表,然後列印列表的內容,就可以取得與print_all_2類似的功能。生成器還有乙個好處,就是不用佔據很多記憶體。

有一點還值得指出,就是print_all_1會以深度優先(depth-first)的方式遍歷樹(tree),而print_all_2則是寬度優先(width-first)。有時候,一種遍歷方式比另一種更合適。但這要看你的應用的具體情況。

資料結構演算法題 判斷乙個數字是否是回文數

題目大意 判斷乙個數字是否是回訪字數,不要使用額外的空間。解題思路 先逆序然後判斷是否相等 為了不使用額外的空間,參考了其它的解決,那些解法看起來在ispalindrome方法中沒有使用額外引數,但是卻使用了方法呼叫,這個比乙個整數消耗的空間更多 並沒有達到題目的要求,是假的實現,所以本題依然採用乙...

資料結構 乙個陣列實現兩個棧

乙個陣列實現兩個棧有很多想法,我先寫一種比較簡單的,思路如下圖所示 如下 includeusing namespace std 乙個陣列實現兩個棧 template class arraystack void pusharray1 const t x else cout 該棧已滿 0 else co...

資料結構 乙個陣列實現兩個堆疊

1 如何判斷棧滿?棧滿的判斷可以根據兩個棧頂之間的距離來判斷,當棧滿時必然存在top2 top1 1。int isfull stack s 2 從陣列頂端壓棧,棧頂是減1 從陣列底部壓棧,棧頂是加1 3 從陣列頂端出棧,棧頂是加1 從陣列底部出棧,棧頂是減1 c語言實現 include includ...