我有一个python code来将一个字符串数学表达式转换成一个二叉树,并对树的节点进行排序,这样左子节点总是比右子节点小。我想按以下顺序打印二叉树。在
例如,考虑数学表达式((2*75)/4)。buildParseTree()将字符串表达式转换为树,printNodeInLevels()重新排列节点,使每个级别的左子节点小于右子节点。操作数<;运算符和运算符的顺序为“+”<;“-”<;“*”<;“/”。如果树的结构是这样的
+
/\
4 *
/\
2 75
我想打印如下。我该怎么做?因为数学表达式的长度一直在变化,例如(24*2),((5-1)*(2/3)),(20-(5+4))等
^{pr2}$我已经找到了按级别打印节点的方法,就像在按顺序遍历中一样模式。如果我按如下方式调用该方法,它将打印以下内容:
pt = buildParseTree("( ( 2 * 74 ) / 4 )")
printNodesInLevels(pt)
输出:
/
4 *
2 74
首先,您应该阅读python的PEP8代码约定,因为它说函数、属性和变量应该是snake_的大小写。在
你正在以一种迭代的方式打印,这意味着你不能在等腰三角形中打印它,因为你不知道底部(树的最低部分)的大小,以迭代的方式,你应该像一个90度角的三角形一样打印它。在
或者您可以将所有信息收集到一个列表或一个字符串中,然后将其格式化并打印出来。想想头,然后想想孩子们中间有线。在
简单而粗糙:
我创建了一个函数来打印任何二叉树结构。在
它非常通用,只需要一个起始节点(根)和一个函数(或lambda)就可以获得标签和左/右子节点:
通常在节点类上使用它:
一个二次方程(-b+/-sqrt(b**2-4*A*c))/(2*A)可以这样打印:
^{pr2}$下面是printBTree函数:
下面是一个使用简单TreeNode类生成的输出类型的示例。在
这将产生以下输出:
该函数的通用性足以处理未存储在对象层次结构中的二叉树结构。以下是如何使用它从包含堆树的列表中打印的示例:
此功能将自动调整宽标签的缩进:
它还可以将树倒置打印(这对于家谱来说是合适的):
相关问题 更多 >
编程相关推荐