gpt4 book ai didi

java - 计算器算法 - 在二叉搜索树上使用迭代而不是递归

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:44:12 24 4
gpt4 key购买 nike

除了我正在计算计算器的表达式输入之外,我已经看到了如何遍历二叉树并找到所有节点的总和的方法。节点根据操作顺序以适当的顺序排列,节点是operatorsoperands。我认为 recursion 比迭代慢,所以我想弄清楚如何遍历二叉树并找到在没有 recursion 的情况下输入的表达式的结果。

树的例子:

      +
* /
3 4 4 2

我到目前为止的递归方法(我为运算符使用了一个枚举):

public static float evaluate(BETNode root)
{
if (root == null)
{
throw new IllegalArgumentException("Error: Root is null!");
}

if (root.getType() == BETNodeType.OPERAND)
{
return root.getOperand();
}

float leftValue = evaluate(root.getLeft());
float rightValue = evaluate(root.getRight());

switch (root.getOperator())
{
case '+':
return leftValue + rightValue;

case '-':
return leftValue - rightValue;

case '*':
return leftValue * rightValue;

case '/':
return leftValue/rightValue;
}

throw new IllegalArgumentException("Error.");
}

最佳答案

正如我在上面的评论中提到的,如果你做了 iterative post-order traversal ,您将按以下顺序获得节点:

3, 4, *, 4, 2,/, +。

由此,您只需要一个堆栈来计算表达式。

Push 3
Push 4
Push (pop() * pop())

Push 4
Push 2
Push (pop() / pop())
Push (pop() + pop())
//Result

同样有趣的是 Shunting Yard Algorithm它根据中缀表达式进行求值。

关于java - 计算器算法 - 在二叉搜索树上使用迭代而不是递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30149007/

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