使用“动态构造二叉树”;节点";python中的结构
我正在尝试使用zss库中的“Node”类型将数学表达式转换为二叉树结构。我之所以使用这种特殊的“节点”类型,是因为我想使用同一个库中的函数计算树编辑距离 数学表达式可以采用不同的格式,例如(28+32),((75+2)-21+(94-90)),((53+67)/2),((40*51)/(86-52))等 树是二叉树。根节点始终是运算符,叶子始终是数字 “”树结构总是节点(根节点,[leftChild,righchild])。下面是如何在树中表示表达式的几个示例 以下是我的代码当前的功能():使用“动态构造二叉树”;节点";python中的结构,python,binary-tree,Python,Binary Tree,我正在尝试使用zss库中的“Node”类型将数学表达式转换为二叉树结构。我之所以使用这种特殊的“节点”类型,是因为我想使用同一个库中的函数计算树编辑距离 数学表达式可以采用不同的格式,例如(28+32),((75+2)-21+(94-90)),((53+67)/2),((40*51)/(86-52))等 树是二叉树。根节点始终是运算符,叶子始终是数字 “”树结构总是节点(根节点,[leftChild,righchild])。下面是如何在树中表示表达式的几个示例 以下是我的代码当前的功能():
我尝试为两种表达式类型编写代码。然而,我正试图找到一种更通用的方法来编写它,因为当表达式变得更复杂时,很难以静态方式构建树。我认为您希望递归地构建树。@meggar感谢您的建议。我来试试。你找到你的pb的解决方案了吗?@agenis我无法实现递归解决方案。所以我一直在用我的粗溶液。这是为了研究目的,所以我没有太多时间来实现一个漂亮的。
def generateTree(bs):
item = bs.split()
op_index = []
top_operator = []
left_tree = []
right_tree = []
# stores the index of each operator in item list
for i in range(0, len(item)):
if item[i] in ['+', '-', '*', '/']:
op_index.append(i)
for n in op_index:
#case 1
if (len(op_index) == 1):
top_operator.append(item[n])
#a = Node(item[n - 1], [])
#b = Node(item[n + 1], [])
if(isLeftChildNodeSmaller(item[n-1], item[n+1]) == True):
left_tree.append(Node(item[n - 1], []))
right_tree.append(Node(item[n + 1], []))
else:
left_tree.append(Node(item[n + 1], []))
right_tree.append(Node(item[n - 1], []))
#case 2
elif (len(op_index) == 2):
if(isInt(item[n-1]) == True and isInt(item[n+1]) == True):
if (isLeftChildNodeSmaller(item[n - 1], item[n + 1]) == True):
c = Node(item[n],[Node(item[n - 1], []), Node(item[n + 1], [])])
else:
c = Node(item[n], [Node(item[n + 1], []), Node(item[n - 1], [])])
right_tree.append(c)
else:
top_operator.append(item[n])
if(isInt(item[n-1]) == True):
left_tree.append(Node(item[n-1],[]))
else:
left_tree.append(Node(item[n+1], []))
right_tree.append(a)
final_tree = Node(top_operator, [left_tree[0], right_tree[0]])
return final_tree
t1 = generateTree("( 2 + 1 )")
t2 = generateTree("( 5 + ( 2 + 1 ) )")
editDistance = simple_distance(t1,t2)
print(editDistance) # returns 2