栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

4274. 后缀表达式-二叉表达式树

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

4274. 后缀表达式-二叉表达式树

原题链接

  • 二叉表达式树的后序遍历就是后缀表达式
  • 特例:怎么区分表达式中的正号与加号,负号和减号呢?
    答:如果某个节点是“+”或“-”号,并且其左子树为空时,则该符号为正(负)号,而不是加减号,那么对该节点进行先序遍历而不是后序遍历
ACCode
#include 
using namespace std;

const int N = 25;
int t[N][2], vis[N];
int n;
string v[N];

void traverse(int node)
{
    if (node == -1)
        return;
    if ((v[node] == "-" || v[node] == "+") && t[node][0] == -1)
    {
        cout << "(" << v[node];
        traverse(t[node][1]);
        cout << ")";
    }
    else
    {
        cout << "(";
        traverse(t[node][0]);
        traverse(t[node][1]);
        cout << v[node];
        cout << ")";
    }
}

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> v[i] >> t[i][0] >> t[i][1];
        if (t[i][0] != -1)
            vis[t[i][0]] = 1;
        if (t[i][1] != -1)
            vis[t[i][1]] = 1;
    }

    int p;
    for (int i = 1; i <= n; i++)
    {
        if (!vis[i])
        {
            p = i;
            break;
        }
    }
    traverse(p);
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001610.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号