2016-11-14 170 views
-1
def str_tree(atree,indent_char ='.',indent_delta=2): 
    def str_tree_1(indent,atree): 
     if atree == None: 
      return '' 
     else: 
      answer = '' 
      answer += str_tree_1(indent+indent_delta,atree.right) 
      answer += indent*indent_char+str(atree.value)+'\n' 
      answer += str_tree_1(indent+indent_delta,atree.left) 
      return answer 
    return str_tree_1(0,atree) 

def build_balanced_bst(l): 
    if len(l) == 0: 
     return None 

    else: 
     mid = (len(l)-1)/2 
     if mid >= 1: 
      build_balanced_bst(l[:mid]) 
      build_balanced_bst(l[mid:]) 
     else: 
      return 

我的build_balanced_bst(L),該build_balanced_bst(L)工作採取了在增加順序排序的唯一值的列表。調用build_ballanced_bst(名單(irange(1,10))返回高度爲3的二叉搜索樹,因爲這將打印:打印二叉樹如何解決build_balanced_bst功能

......10 
....9 
..8 
......7 
....6 
5 
......4 
....3 
..2 
....1 

的str_tree函數用來打印build_balanced_bst()函數返回什麼我str_tree功能我只能改變build_balanced_bst()函數

我在列表中使用了中間值作爲根的值當我嘗試在下面調用build_balanced_bst(l)時,不打印任何東西

l = list(irange(1,10)) 
t = build_balanced_bst(l) 
print('Tree is\n',str_tree(t),sep='') 

有人可以幫我修復我的build_balanced_bst(l)函數嗎?非常感謝。

+0

你的樹的結構應該是什麼樣的?有沒有'節點'類或什麼的? ('str_tree'似乎期望有'left','right'和'value'屬性的東西。)你的'build_balanced_bst'函數不會返回任何東西(這在技術上意味着它總是返回'None')。它在你給它的列表上遞歸,但它實際上從來沒有對列表的數據做任何事情。 – Blckknght

回答

0

str_tree()不會做任何事情:它只是定義了一個嵌套函數並隱式返回None

作爲開始,你可以有str_tree做東西

def str_tree(atree, indent_char ='.', indent_delta=2): 
    def str_tree_1(indent, atree): 
     # Note that str_tree_1 doesn't use the indent argument 
     if atree == None: 
      return '' 
    return str_tree_1(indent_delta, atree) 

但是,這僅僅是一個開始。