gpt4 book ai didi

java - 构建二叉树

转载 作者:行者123 更新时间:2023-11-30 07:28:19 25 4
gpt4 key购买 nike

每次滚动循环时,我都会将表达式构建到二叉树中,在“)”的每个结尾处创建一棵新树,并将这些运算符/操作数插入堆栈,以便弹出回一个完整的二叉树。

我的构建方法:

package lab5;

import net.datastructures.*;

public class Expression<T> {

/** Contain Linked Tree and Linked Stack instance variables **/
LinkedBinaryTree<T> tree;
LinkedStack<LinkedBinaryTree<T>> stack;


public Expression () {
tree = new LinkedBinaryTree<T> ();
stack = new LinkedStack<LinkedBinaryTree<T>>();

} // end constructor

public LinkedBinaryTree<T> buildExpression (String expression) {// LinkedBinaryTree<T> is a type of LinkedBinaryTree
// major TODO to implement the algorithm]
LinkedBinaryTree<T> operand, op1, op2;
LinkedStack<LinkedBinaryTree<T>> newStack = new LinkedStack<LinkedBinaryTree<T>>();
String symbol;

int i = 0;
int len = expression.length();

for (i = 0; i < len; i++) {
symbol = expression.substring(i, i+1);

if ((!symbol.equals ("(")) && (!symbol.equals (")"))) {
operand = new LinkedBinaryTree<T> ();
operand.addRoot((T)symbol);
newStack.push(operand);
} else if (symbol.equals ("(")){
continue;
} else {
op2 = newStack.pop();
operand = newStack.pop();
op1 = newStack.pop();
tree.attach(operand.root(), op1, op2);
newStack.push(tree);
}
}
tree = newStack.pop();
return tree;

} // end method buildExpression

}

我的测试:

package lab5;
import net.datastructures.*;

public class ExpressionTest {

/**
* @param args
* @throws EmptyTreeException
*/

/** Paranthesize is code fragment 8.26 pg. 346 **/

/** evaluateExpression method apart of LinkedBinaryTree class in net.datastructures **/

public static void main(String[] args) {
// declare local variables/objects
String s = new String ();
String exp = "((((3+1)x3)/((9-5)+2))-((3x(7-4))+6))"; //-13
Expression<String> expression = new Expression<String> ();

// print the expression string
System.out.printf ("The original Expression String generated via printf: %s", exp);

// create the tree using the 'stub' method
// i.e. it does nothing
LinkedBinaryTree<String> tree = expression.buildExpression (exp);

// use Object.toString simply to print its reference
System.out.printf ("\n\nThe Tree: %s\n", tree);

}

}

我收到 NullPointerException,但不知道为什么。我是否需要“尝试”然后让错误继续发生?

最佳答案

该错误可能与检查 symbol.equals (' 中的 '(' (单引号)而不是 "(" (双引号)有关) (')。您将字符串与字符进行比较,它们永远不会相等。

也许stack也没有初始化?它应该是 buildExpression() 本地的。

请注意,您的代码片段将无法编译:

  • 堆栈未定义
  • 符号未定义

顺便说一句:buildExpression() 可以是静态的,这样可以避免 main 中空的未使用的表达式分配。

首先检查 "(" 可以避免两次检查 "("

关于java - 构建二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36522929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com