计算表达式树

很简单,采用递归的方式来计算表达式树(二叉树)。

什么是表达式树,请看例子:



下面给出从根节点开始,计算表达式树的值得算法:

//计算表达式树
	  public static double caculatePloenTree(treeNode root)
	  {
		  if(!(root.type.equals("+") || root.type.equals("-")||root.type.equals("*")||root.type.equals("-")))
				return Double.parseDouble(root.type);
		  else if(root.type.equals("+"))
		  {
			  return caculatePloenTree(root.lnode) + caculatePloenTree(root.rnode);
		  }
		  else if(root.type.equals("-"))
		  {
			  return caculatePloenTree(root.lnode) - caculatePloenTree(root.rnode);
		  }
		  else if(root.type.equals("*"))
		  {
			  return caculatePloenTree(root.lnode) * caculatePloenTree(root.rnode);
		  }
		  else 
		  {
			  return caculatePloenTree(root.lnode) / caculatePloenTree(root.rnode);
		  }
	  }
	  

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java表达式是一种数据结构,它用于表示数学表达式,并且可以方便地计算这些表达式。下面是一个简单的Java程序,用于计算一个包含加、减、乘、除四种运算符的表达式: ```java import java.util.Stack; public class ExpressionTree { private Node root; private class Node { public String value; public Node left, right; public Node(String value) { this.value = value; this.left = null; this.right = null; } } public ExpressionTree(String expression) { Stack<Node> stack = new Stack<Node>(); String[] tokens = expression.split(" "); for (String token : tokens) { if (isOperator(token)) { Node right = stack.pop(); Node left = stack.pop(); Node node = new Node(token); node.left = left; node.right = right; stack.push(node); } else { Node node = new Node(token); stack.push(node); } } root = stack.pop(); } public double evaluate() { return evaluate(root); } private double evaluate(Node node) { if (node == null) return 0; if (node.left == null && node.right == null) return Double.parseDouble(node.value); double left = evaluate(node.left); double right = evaluate(node.right); switch (node.value) { case "+": return left + right; case "-": return left - right; case "*": return left * right; case "/": return left / right; default: return 0; } } private boolean isOperator(String token) { return token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/"); } public static void main(String[] args) { ExpressionTree tree = new ExpressionTree("5 1 2 + 4 * + 3 -"); System.out.println(tree.evaluate()); } } ``` 这个程序可以计算任意一个包含加、减、乘、除四种运算符的表达式,并且输出计算结果。例如,上面的main方法会输出16.0,因为这个表达式计算结果是5 + (1 + 2) * 4 - 3 = 16. ### 回答2: Java表达式计算是一种将表达式转换为形结构并进行计算的方法。首先,通过解析表达式,可以将其转换为型结构,该结构由节点和连接它们的边组成。节点可以是操作符或操作数,并且每个操作符节点都有子节点,表示它的操作数。 在计算表达式时,我们可以使用递归的方法遍历整个。从根节点开始,我们检查当前节点的类型是操作符还是操作数。如果是操作数节点,则直接返回其值。如果是操作符节点,则递归计算其子节点的值,并根据操作符的类型对子节点的值进行相应的操作。 例如,假设我们有一个表达式的根节点是一个"+"节点,其左子节点是一个数字节点2,右子节点是一个数字节点3。在计算表达式时,我们首先递归计算左子节点的值,得到2,然后递归计算右子节点的值,得到3。最后,根据操作符节点的类型执行加法操作,并将结果返回。 通过递归遍历整个表达式,我们可以计算任意复杂度的表达式。这种方法的优势是可以对表达式进行灵活的解析和计算,可以处理各种类型的操作符和操作数,并且能够处理嵌套和多层级的表达式。 总而言之,Java表达式计算是一种将表达式转换为形结构并进行计算的方法,通过递归遍历整个表达式,可以计算任意复杂度的表达式。这种方法具有灵活性和扩展性,可以处理各种类型的操作符和操作数,并且能够处理嵌套和多层级的表达式。 ### 回答3: Java表达式计算是一种将数学表达式转化为二叉表示,并以结构进行计算的方法。该方法可以有效地解决复杂的数学运算问题。 在表达式中,每个节点都代表着一个操作符或者操作数。操作符节点有左子节点和右子节点,而操作数节点没有子节点。通过将数学表达式构建为表达式,我们可以很方便地对表达式进行计算计算表达式的过程,通常是通过递归算法实现的。首先,我们从根节点开始遍历整个,如果当前节点是操作数节点,直接返回该节点的值。如果当前节点是操作符节点,则需要对其左子和右子进行递归计算,并根据操作符节点的运算规则对子结果进行运算,得到最终的计算结果。 通过表达式计算,我们可以实现对复杂的数学表达式计算,包括加减乘除以及各种嵌套运算的组合。这种方法可以提高计算效率,减少重复计算的次数,提升程序性能。 总之,Java表达式计算是一种将数学表达式转化为结构,并通过递归算法对进行计算的方法。它可以方便地解决复杂的数学运算问题,提高程序的计算效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值