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

个人练习-PAT甲级-1130 Infix Expression

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

个人练习-PAT甲级-1130 Infix Expression

题目链接https://pintia.cn/problem-sets/994805342720868352/problems/994805347921805312

题目大意:根据表达式树得到中序表达式。

思路是中序遍历。

值得注意的点是什么时候要括号什么时候不加。

  • 在叶子节点仅为一个string时不加
  • 在根节点这一层的递归不用加

实际上所有的非叶节点都是运算符,那么考虑-a,a-e两种情况,发现只要是运算符右儿子非空就需要加括号。如下代码中判断符号看flag即可

    bool flag = (idx != root) && (right != -1);

    if (flag == false) {
        Inorder(left);
        cout << tree[idx].data;
        Inorder(right);
    }
    else {
        printf("(");
        Inorder(left);
        cout << tree[idx].data;
        Inorder(right);
        printf(")");
    }

完整代码

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;


class Node{
public:
    string data;
    int left, right;
};


vector tree;
vector parent;
int root;


void Inorder(int idx) {
    if (idx == -1)
        return;

    int left = tree[idx].left;
    int right = tree[idx].right;

    bool flag = (idx != root) && (right != -1);

    if (flag == false) {
        Inorder(left);
        cout << tree[idx].data;
        Inorder(right);
    }
    else {
        printf("(");
        Inorder(left);
        cout << tree[idx].data;
        Inorder(right);
        printf(")");
    }

}


int main() {
    int N;
    scanf("%d", &N);
    tree.resize(N+1);
    parent.resize(N+1, 0);

    for (int i = 1; i <= N; i++) {
        cin >> tree[i].data >> tree[i].left >> tree[i].right;
        if (tree[i].left != -1)
            parent[tree[i].left] = i;
        if (tree[i].right != -1)
            parent[tree[i].right] = i;
    }

    for (int i = 1; i <= N; i++) {
        if (parent[i] == 0) {
            root = i;
            break;
        }
    }

    Inorder(root);

    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026198.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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