填充二叉搜索树?

时间:2014-03-20 22:50:38

标签: python tree binary-tree

我正在尝试从以下类创建二进制搜索树:

class Tree(object):
    def __init__(self):
        self.data = None
        self.left = None
        self.right = None

以下代码应该在列表中工作,将其切成两半并递归地传递一半。但是,我左右两个节点都是相同的。

def populatetree(words):#not working
   middle = len(words)//2
   root = Tree()
   root.data = wordlist[middle][0]

   if len(words) > 3:
      root.left = populatetree(words[:len(words)//2])
      root.right = populatetree(words[len(words)//2+1:])
   else:
      if middle!=0:
         root.left = Tree()
         root.left.data = words[0]
      if(len(words)==3):
         root.right = Tree()
         root.right.data = words[2]
   return root

示例输入:

['2', 'a', 'add', 'an', 'be', 'convert', 'integer', 'is', 'print', 'result', 'set', 'thank', 'the', 'to', 'variable', 'x1', 'y2', 'yes', 'you']'

示例输出:

['result']
['be', 'be']
['add', 'add', 'add', 'add']
['a', '2', 'a', '2', 'a', '2', 'a', '2']
['2', 'convert', 'set', 'x1']

其中输出以金字塔形式打印,其他字bebe属于result,第一个add和第二个add属于是,并且接下来的两个adds属于另一个be,依此类推。我检查了实际数据,tree.left.datatree.right.data实际上都是bebe。这让我感到困惑,因为正确的子树甚至不能看到be,因为我将它传递给list的右半部分。

知道我需要做些什么来正确填充列表吗?

1 个答案:

答案 0 :(得分:1)

看起来Tree.data是从名为" wordlist"的内容中获取的,这在您提供的示例代码中未定义,并且不是函数populatetree的参数。也许wordlist是原始列表?