Java 预排序二叉搜索树表达式的语法验证
嘿,伙计们,对于一个赋值,我必须读入一个用户输入,以便像这样的二进制搜索树表达式:“(a(g)),其中“a”是根,“g”是“a”的左子级。我一直在努力确保语法正确。例如,如果输入了(a(g),这是不正确的语法,因为“a”没有右右右括号输入也是不正确的,因为每对括号应该只有一个字母数字字符。我有验证括号正确数量的代码,但我一直在尝试确保每对括号只包含一个字母数字字符。这是我迄今为止所拥有的。感谢所有帮助/建议Java 预排序二叉搜索树表达式的语法验证,java,Java,嘿,伙计们,对于一个赋值,我必须读入一个用户输入,以便像这样的二进制搜索树表达式:“(a(g)),其中“a”是根,“g”是“a”的左子级。我一直在努力确保语法正确。例如,如果输入了(a(g),这是不正确的语法,因为“a”没有右右右括号输入也是不正确的,因为每对括号应该只有一个字母数字字符。我有验证括号正确数量的代码,但我一直在尝试确保每对括号只包含一个字母数字字符。这是我迄今为止所拥有的。感谢所有帮助/建议 public static boolean balancedTree(String
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();
}
公共静态布尔balancedTree(字符串s)抛出InvalidTreeSyntax{
堆栈=新堆栈();
对于(int i=0;i
首先需要确保您知道语法是什么:
tree: /* empty */
| '(' letter tree tree ')'
letter: 'a' | 'b' | ... | 'z'
然后,您的解析器应该实际构造一棵树。显然,这是一个递归函数。当函数的最高调用消耗了所有输入时,整个字符串是正确的。您首先需要确保知道语法是什么:
tree: /* empty */
| '(' letter tree tree ')'
letter: 'a' | 'b' | ... | 'z'
然后你的解析器应该实际构造一棵树。显然,这是一个递归函数。当函数的最顶端调用消耗了所有输入时,整个字符串都是正确的。你能提供更多的测试用例吗,你在问题中提供的测试用例只有一个子。如果你有两个子,输入看起来会是什么样子对于a?@RohanSharma,很抱歉,对于一棵有一个根和两个孩子的简单树,它应该是这样的:(a(g)(b))“A”是“根”,“G”和“B”是孩子们。我现在只是尽可能简单地做这件事。你有没有尝试把字母表放在你的堆栈中,当你遇到一个封闭的括号时,你首先取出字母表,然后检查上面是否有一个开式括号,也可以考虑A没有。任何正确的子级,在这种情况下,输入看起来是这个(a(g))还是这个(a(g)()?@RohanSharma Hi Rohan!如果没有子项,并且用户输入了一对空括号,它应该抛出一个异常。请您提供更多的测试用例,您在问题中提供的测试用例只有一个子项。如果您有两个子项,输入将如何?@RohanSharma对此表示抱歉,对于一个简单的树,有一个子项根和两个孩子应该是这样的:(a(g)(b))“A”是“根”,“G”和“B”是孩子们。我现在只是尽可能简单地做这件事。你有没有尝试把字母表放在你的堆栈中,当你遇到一个封闭的括号时,你首先取出字母表,然后检查上面是否有一个开式括号,也可以考虑A没有。任何正确的子项,在这种情况下,输入看起来是这个(a(g))还是这个(a(g)()?@RohanSharma Hi Rohan!如果没有子项,并且用户输入了一对空括号,它应该抛出异常。