编一个程序,读入先序遍历字符串,根据此字符串建立一棵二叉树(以指针方式存储),请注意的是,我们保证该树一定是表达式树(见教材5.2 5.8)。 例如下面的先序遍历字符串: + 13 # # * 5 # # 9 # # 运算符只可能是加减乘除,数值为小于等于100,各结点用空格分开,其中“#”代表空树。 建立起此二叉树以后,再按要求输出二叉树。 输入 输入由多组测试数据组成。 每组数据包含一行字符串,即表达式树的先序遍历序列,字符串长度大于0且不超过100。 输出 对于每组数据,输出一行,内容是该表达式树的全括号表达式,见示例。 样例输入 + 13 # # * 5 # # 9 # # * + 13 # # 5 # # 9 # # 样例输出 (13+(5*9)) ((13+5)*9)
时间: 2024-03-22 18:41:06 浏览: 46
给定一个前序的字母字符串,并把它们创建成一个二叉树,并且遍历输出它的中序和后序
以下是实现该程序的 Python3 代码:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def buildTree(preorder):
if not preorder:
return None
root_val = preorder.pop(0)
if root_val == '#':
return None
root = TreeNode(root_val)
root.left = buildTree(preorder)
root.right = buildTree(preorder)
return root
def treeToString(root):
if not root:
return ''
if not root.left and not root.right:
return str(root.val)
left_str = treeToString(root.left)
right_str = treeToString(root.right)
if root.val in ['+', '-', '*', '/']:
return '(' + left_str + root.val + right_str + ')'
else:
return left_str + root.val + right_str
while True:
try:
preorder = input().split()
root = buildTree(preorder)
print(treeToString(root))
except:
break
```
该程序使用了递归的方法构建二叉树,并且根据题目要求输出了全括号表达式。在输入结束前,程序会一直读入数据并输出相应结果。
阅读全文