构建二叉树的正确方法?

时间:2017-05-26 15:11:29

标签: python recursion binary-tree

假设我们有一个类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')

所以最终树的视觉表示就像这样visual representation of the tree

我知道我需要使用递归和控制结构来解决这个问题,但我不确定如何将它应用于在树中添加节点。

如果需要澄清任何事情,请告知我们,我们将不胜感激。

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]。