题目描述
给定一个二叉表达式树,请你输出相应的后缀表达式,要求使用括号反映运算符的优先级。
输入格式
第一行包含整数 N,表示节点数量。节点编号 1∼N。
接下来 N 行,每行给出一个节点的信息(第 i 行对应第 i 个节点),格式为:
data left_child right_child
其中,data 是一个不超过 10 个字符的字符串,left_child 和 right_child 分别是该节点的左右子节点的编号。
没有子节点(即 NULL),则用 −1 表示。
下面两图分别对应给出的两个样例。
输出格式
在一行中输出答案,表达式符号之间不得有空格。
数据范围
1≤N≤20
思路
①首先搞清楚二叉树的后缀表达式即二叉树的后序遍历,即从中间结点先遍历左儿子,再遍历右儿子,最后遍历中间结点。以这个思路进行dfs即可解题。
②由于该题给定的是二叉树表达式,因此对于含有-(负号)
的结点,没有左儿子,此时需要先输出负号再遍历右儿子,因此遇到负号需要特判。
代码
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespa