Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 预排序二叉搜索树表达式的语法验证_Java - Fatal编程技术网

Java 预排序二叉搜索树表达式的语法验证

Java 预排序二叉搜索树表达式的语法验证,java,Java,嘿,伙计们,对于一个赋值,我必须读入一个用户输入,以便像这样的二进制搜索树表达式:“(a(g)),其中“a”是根,“g”是“a”的左子级。我一直在努力确保语法正确。例如,如果输入了(a(g),这是不正确的语法,因为“a”没有右右右括号输入也是不正确的,因为每对括号应该只有一个字母数字字符。我有验证括号正确数量的代码,但我一直在尝试确保每对括号只包含一个字母数字字符。这是我迄今为止所拥有的。感谢所有帮助/建议 public static boolean balancedTree(String

嘿,伙计们,对于一个赋值,我必须读入一个用户输入,以便像这样的二进制搜索树表达式:“(a(g)),其中“a”是根,“g”是“a”的左子级。我一直在努力确保语法正确。例如,如果输入了(a(g),这是不正确的语法,因为“a”没有右右右括号输入也是不正确的,因为每对括号应该只有一个字母数字字符。我有验证括号正确数量的代码,但我一直在尝试确保每对括号只包含一个字母数字字符。这是我迄今为止所拥有的。感谢所有帮助/建议

   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!如果没有子项,并且用户输入了一对空括号,它应该抛出异常。