java - 验证 Pre-Order Binary Search Tree 表达式的语法
问题描述
嘿伙计们,对于一个作业,我必须在用户输入的有序二叉搜索树表达式中读取如下:“(a(g))”,其中“a”是根,“g”是“a”的左孩子'。我被困在试图确保正确的语法。例如,如果输入 (a(g),它是不正确的语法,因为 'a' 没有右括号。同样,如果输入 (ab(g)) 也是不正确的,因为应该只有一个字母数字每对括号的字符。我有验证括号正确数量的代码,但我一直在努力确保每对括号只包含一个字母数字字符。这就是我到目前为止所拥有的。感谢您的任何帮助/建议!
public static boolean balancedTree(String s) throws InvalidTreeSyntax {
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i ++) {
char c = s.charAt(i);
if (c == '(') {
stack.push(c);
} else if (c == ')') {
if (stack.isEmpty() || stack.pop() != '(') {
return false;
}
}
}
return stack.isEmpty();
}
解决方案
您首先需要确保您知道语法是什么:
tree: /* empty */
| '(' letter tree tree ')'
letter: 'a' | 'b' | ... | 'z'
然后你的解析器实际上应该构造一棵树。这显然是一个递归函数可以做到这一点。当函数的最顶层调用消耗所有输入时,整个字符串都是正确的。
推荐阅读
- flutter - 我的 http 请求后出现意外的 websocket 请求
- reactjs - tokbox/opentok - 视频聊天,有没有办法突出特定的发布者?
- c# - 在 WinForm 表面上渲染 SharpDX.Direct2D1.Effects.Brightness
- database - Sqlalchemy upsert 关于 postgresql 上的冲突
- java - 应用程序中缺少文本,但在 Android Studio 中的模拟中可见
- firebase - 使用颤振中的新密码重置更新firebase firestore和实时数据库
- angular - 添加子路由后,下拉菜单在 Angular 中不起作用
- pine-script - 变量在不应该更新时更新
- excel - Excel VBA:如果满足条件,如何使用每行的单元格值填充组合框
- tensorflow - tensorflow/core/framework/cpu_allocator_impl.cc:80] 15414067200 的分配超过了 google colab 上可用系统内存的 10%