扩展buildParseTree方法,使其能处理字符间没有空格的数学表达式
时间: 2024-01-08 13:02:19 浏览: 73
字符串去掉空格
在原有的 `buildParseTree` 方法中,我们是通过空格将表达式分割成单个字符来进行处理的。但是如果表达式中没有空格,那么我们需要采取其他的方式来进行处理。
一种解决方案是在读取表达式时,每当我们遇到一个操作符或者数字的时候,就将其添加到一个缓存中,直到遇到下一个操作符或数字。这样就可以将数学表达式中的数字和操作符分离出来,然后再将其转换成树形结构。
这里是一个修改后的 `buildParseTree` 方法的示例代码:
```python
def buildParseTree(fpexp):
fplist = list(fpexp)
stack = []
current_tree = BinaryTree('')
stack.append(current_tree)
for i in fplist:
if i == '(':
current_tree.insertLeft('')
stack.append(current_tree)
current_tree = current_tree.getLeftChild()
elif i not in ['+', '-', '*', '/', ')']:
# 如果字符是数字,则添加到缓存中
current_tree.setRootVal(
current_tree.getRootVal() + i)
elif i in ['+', '-', '*', '/']:
# 如果字符是操作符,则将缓存中的数字作为左子树,操作符作为根节点,新建一个右子树
current_tree.setRootVal(i)
current_tree.insertRight('')
stack.append(current_tree)
current_tree = current_tree.getRightChild()
elif i == ')':
# 如果字符是右括号,则返回到父节点
current_tree = stack.pop()
else:
raise ValueError('Unknown Operator: ' + i)
return current_tree
```
在这个改进的方法中,我们使用了一个缓存来收集数字字符。每次遇到一个数字字符时,我们将其添加到缓存中,而不是立即将其作为树节点插入。只有在遇到操作符时,才会将缓存中的数字作为左子树插入到树中。
这样,无论表达式中是否有空格,我们都可以正确地构建出树形结构来表示表达式。
阅读全文