2016-11-14 173 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) 

但是,这仅仅是一个开始。