假设我们有一个类BinaryTree
定义如下(不能修改):
class BinaryTree:
def __init__(self, value = None):
self.value = value
if self.value is not None:
self.left_node = BinaryTree()
self.right_node = BinaryTree()
else:
self.left_node = None
self.right_node = None
我有一个堆栈,它由数字和'+'组成,例如
stack = ['1', '2', '+', '3', '4', '5', '+', '+', '+']
现在我想构建二叉树。规则如下:
从右到左,根是'+'。
然后,如果字符是'+',则扩展分支,
否则,我们会将left_node
中的数字添加到right_node
。
按顺序我弹出列表中的最后一个元素,该过程的详细说明如下:
t = BinaryTree('+')
t.left_node = BinaryTree('+')
t.left_node.left_node = BinaryTree('+')
t.left_node.left_node.left_node = BinaryTree('5')
t.left_node.left_node.right_node = BinaryTree('4')
t.left_node.right_node = BinaryTree('3')
t.right_node = BinaryTree('+')
t.right_node.left_node = BinaryTree('2')
t.right_node.right_node = BinaryTree('1')
我知道我需要使用递归和控制结构来解决这个问题,但我不确定如何将它应用于在树中添加节点。
如果需要澄清任何事情,请告知我们,我们将不胜感激。
答案 0 :(得分:1)
我会做以下事情:
定义一个使用列表构建节点的函数,并返回列表左边的内容:
def noding(l):
t = BinaryTree(l[-1])
if l[-1] == '+':
left, rest = noding(l[:-1])
t.left_node = left
right, rest = noding(rest)
t.right_node = right
return t, rest
if l[-1] != '+':
return t, l[-1]
它有点原始,我没有时间真正认真考虑,特别是处理无。
编辑:不要返回None,而是像以前一样返回l [: - 1]。