Python 构造二叉树的正确方法?

Python 构造二叉树的正确方法?,python,recursion,binary-tree,Python,Recursion,Binary Tree,假设我们有一个类BinaryTree,定义如下(不能修改): 我有一个堆栈,它由数字和“+”组成,例如 stack = ['1', '2', '+', '3', '4', '5', '+', '+', '+'] 现在我想构造一个二叉树。规则如下: 从右到左,根是“+”。 然后,如果字符为“+”,则扩展分支, 否则,我们将从左\u节点添加到右\u节点 按照我弹出列表中最后一个元素的顺序,流程的详细说明如下: t = BinaryTree('+') t.left_node = BinaryTree

假设我们有一个类
BinaryTree
,定义如下(不能修改):

我有一个堆栈,它由数字和“+”组成,例如

stack = ['1', '2', '+', '3', '4', '5', '+', '+', '+']
现在我想构造一个二叉树。规则如下: 从右到左,根是“+”。 然后,如果字符为“+”,则扩展分支, 否则,我们将从
左\u节点
添加到
右\u节点

按照我弹出列表中最后一个元素的顺序,流程的详细说明如下:

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')
所以最终,树的视觉表现是这样的

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


如果有任何需要澄清的地方,请告诉我,我们将非常感谢您的帮助。

我将采取以下措施:

  • 定义一个函数,该函数使用列表构建节点并返回列表中剩余的内容:

    def点头(l):

这有点生涩,我没有时间认真思考,尤其是在处理这些问题时


编辑:不返回None,但像前面一样返回l[:-1]。

这看起来像是一个标准的介绍性数据结构问题。如果是家庭作业,你可能会发现问这个问题很有用。嗨,马修,谢谢你的提醒。是的,这确实是作业的一部分,我现在一直在做作业。既然这是作业,你在使用哪一个算法文本(或者上节课的手边有)?科曼?Sedgewick?哦,我们没有教科书,讲师解释了二叉树,但这个挑战需要递归方面的知识谢谢Marc的提示,它确实帮助了我,因为我一直坚持在返回语句后调用递归函数的想法。你的回答很好,但是,就这个问题而言,我会在列表中稍微将l[-1]改为l.pop()。这真的帮助了我,非常感谢!
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')
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]