我正在尝试从以下类创建二进制搜索树:
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']
其中输出以金字塔形式打印,其他字be
和be
属于result
,第一个add
和第二个add
属于是,并且接下来的两个adds
属于另一个be
,依此类推。我检查了实际数据,tree.left.data
和tree.right.data
实际上都是be
和be
。这让我感到困惑,因为正确的子树甚至不能看到be
,因为我将它传递给list
的右半部分。
知道我需要做些什么来正确填充列表吗?
答案 0 :(得分:1)
看起来Tree.data是从名为" wordlist"的内容中获取的,这在您提供的示例代码中未定义,并且不是函数populatetree的参数。也许wordlist是原始列表?