UVa 11234 - Expressions

UVa11234表达式解析
本文介绍了解决UVa11234问题的方法,通过倒序读取输入并使用栈进行层次遍历输出。文章提供了一个C++实现示例,包括构建树形结构和层次遍历的过程。

传送门UVa 11234 - Expressions

一开始没思路, 后来看到有人一句话概述了方法, 然后自己捉摸了一下, 就想到了.


只要大家把输入倒着看, 就是一个先遍历根节点右子树再遍历左子树的" 先序遍历", 叶子就是小写字母, 然后输出就是层次输出, 但顺序是倒着的, 所以我用栈存储最后的答案.


估计大家看着也不是很明白, 不过只要把Sample Data画一下就很直观了, 也可以参考一下这篇文章, 树画出来的样子如下, 只不过他的方法太复杂了, 用并树来建树.

优快云说有被禁用的URL... 等我联系了客服再加上链接.. 话说最近优快云老出问题.(╯‵□′)╯  ┴─┴ 



因为题目说输入可能有10000, 为了避免浪费空间一咬牙用string写了... 然后就习惯性加上了printf, CE了一次...

详情见代码

#include <iostream>
#include <string>
#include <cctype>
#include <queue>
#include <stack>
using namespace std;

struct Node
{
    char c;
    Node *left, *right;
    Node(char v)
    {
        left = right = 0;
        c = v;
    }
};

stack<char> ans;
queue<Node *> scan;
string str;
int i;

Node *Build();
void BFS(Node *root);
void Output();

int main()
{
	//freopen("input.txt", "r", stdin);
    int n;
	cin >> n;
    while (n--)
    {
        cin >> str;
        i = str.size() - 1;
        //建树.
        Node *root = Build();
        //层次遍历输出.
        scan.push(root);  //先把根节点放入队列.
        BFS(root);
		Output();
    }
    return 0;
}

Node *Build()
{
	Node *root = new Node(str[i]);	
    if (islower(str[i]))    //如果当前值是小写字母, 说明没有左右子树了. 
	{
		i--;
        return root;
	}
	i--;
    root->right = Build();
    root->left = Build();
	return root;
}

void BFS(Node *root)
{
	Node *now;
	while (!scan.empty())
	{
		now = scan.front();
		if (scan.front()->left)	//如果当前结点有左子树. 因为有左子树必有右子树.
		{
			ans.push(now->left->c);		//接下来两个结点进栈.
			ans.push(now->right->c);
			scan.push(now->left);	//放队列里
			scan.push(now->right);
			scan.pop();	//当前结点出队.
		}
		else
			scan.pop();		//不然的话当前结点就是小写字母, 直接出队.
	}
}

void Output()
{
	while (!ans.empty())
	{
		cout << ans.top();
		ans.pop();
	}
	cout << str[str.size() - 1];
	cout << endl;
}


<think>好的,我现在需要帮助用户解决关于ESLint的no-unused-expressions规则的配置问题。用户提到可能涉及ESLint规则或其他代码检查工具的配置需求,所以首先要确认这个规则的具体情况。 首先,我回忆一下no-unused-expressions规则的作用。这个规则主要是用来检查代码中是否有未使用的表达式,也就是那些没有对程序状态产生任何影响的表达式。比如,用户可能写了类似`a + b;`这样的语句,虽然计算了a和b的和,但没有赋值给变量或用于其他操作,这样的表达式就是未使用的,可能会被此规则检测到并报错。 接下来,我需要考虑用户可能遇到的常见场景。例如,使用Chai.js这样的测试库时,可能会写出`expect(...).to.be.true;`这样的断言语句。这些语句在ESLint默认配置下可能被标记为未使用的表达式,导致错误。因此,用户可能需要调整规则配置来允许这种情况。 根据引用内容,用户之前提到过使用eslint-config-prettier来禁用与格式相关的规则,但这里的问题是关于未使用表达式的,属于逻辑层面的规则,所以需要直接配置ESLint的规则而不是通过Prettier处理。 用户可能已经在使用create-react-app,而引用中提到的方案三使用了react-app-rewired和customize-cra来覆盖配置。这时候,用户可能需要通过修改ESLint配置文件来调整规则设置,而不需要eject项目。 接下来,我需要整理配置这个规则的具体步骤。通常,在.eslintrc文件中,可以通过rules字段来设置。对于no-unused-expressions,需要允许某些表达式(如测试中的断言),可能需要设置allowTernary或者allowShortCircuit等选项。例如: { "rules": { "no-unused-expressions": ["error", { "allowShortCircuit": true, "allowTernary": true, "allowTaggedTemplates": false }] } } 另外,针对特定库如Chai.js,可能需要使用eslint-plugin-chai来解决,或者在规则中添加allow选项。例如使用插件后配置: { "plugins": ["chai-friendly"], "rules": { "no-unused-expressions": "off", "chai-friendly/no-unused-expressions": "error" } } 同时,用户可能需要知道如何在create-react-app项目中应用这些配置,尤其是如果项目是基于react-scripts的话。根据引用中的方案三,使用react-app-rewired来覆盖配置,可以修改config-overrides.js文件,将自定义的ESLint配置合并进去。 最后,要提醒用户注意版本兼容性,比如引用中提到react-app-rewired适用于4.x以下的版本,如果用户使用的是更高版本可能需要其他方法。此外,测试配置是否生效的方法,比如运行ESLint命令检查,或者查看IDE的错误提示是否消失。</think>### ESLint no-unused-expressions 规则配置解决方案 #### 规则定义与作用 `no-unused-expressions` 是 ESLint 核心规则之一,用于检测代码中未产生实际作用的表达式(例如未赋值或未参与逻辑判断的数学运算)。该规则可避免因冗余代码导致的可读性问题和潜在错误。 #### 典型应用场景 1. 单元测试框架中的断言表达式(如 `expect(...).to.be.true`) 2. JavaScript 短路表达式(如 `a || b`) 3. 三元运算符表达式(如 `condition ? action1() : action2()`) #### 配置方法 通过 `.eslintrc` 配置文件进行设置,支持以下参数: ```json { "rules": { "no-unused-expressions": ["error", { "allowShortCircuit": true, // 允许短路表达式 "allowTernary": true, // 允许三元运算符 "allowTaggedTemplates": false // 是否允许标记模板字符串 }] } } ``` #### 测试框架特殊配置 使用 Chai.js 等断言库时,建议安装专用插件: ```bash npm install eslint-plugin-chai-friendly --save-dev ``` 配置示例: ```json { "plugins": ["chai-friendly"], "rules": { "no-unused-expressions": "off", "chai-friendly/no-unused-expressions": "error" } } ``` #### 在 Create-React-App 中的实现 通过 `react-app-rewired` 覆盖默认配置(适用 react-scripts 4.x 以下版本): 1. 修改 `config-overrides.js`: ```javascript const { override, useEslintRc } = require('customize-cra'); module.exports = override(useEslintRc()); ``` 2. 创建 `.eslintrc` 文件写入自定义规则[^2][^3] #### 验证配置有效性 ```bash npx eslint yourfile.js # 或查看 IDE 的 ESLint 错误提示 ``` #### 注意事项 1. 新版 react-scripts (5.0+) 使用 `ESLINT_NO_DEV_ERRORS=true` 环境变量控制检查强度[^1] 2. 与 Prettier 配合时需确保 `eslint-config-prettier` 正确安装[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值