在java中创建二进制表达式树

时间:2013-11-26 20:40:17

标签: java recursion binary-tree

让我们说这个字符串列表提供此方法:[*,+,8,4, - ,7,/,6,3]。 使用以下方法的错误结构是:

|-- *
    |-- +
        |-- 8
        |-- 4
    |-- 8

我知道这个方法爆炸了。当左右两者最终都是数字时,它输入上一次递归的newnode。

如何避免这种情况并将其添加到对方的节点中,而不是再次输入新节点?

public ExpressionTreeNode createExpressionTree(List<String> listofstrings)
{
         ExpressionTreeNode newnode = new ExpressionTreeNode(listofstrings.get(0));

         if(!newnode.isanumber(newnode))
         {
             if(root == null)
             {
             root = newnode;
             }
             listofstrings = removefirst(listofstrings);
             newnode.left = createExpressionTree(listofstrings);
             listofstrings = removefirst(listofstrings);
             newnode.right =createExpressionTree(listofstrings);
             //listofstrings = removefirst(listofstrings);
         }      

          return newnode; // should only be number leaves
}  

1 个答案:

答案 0 :(得分:0)

但我决定再帮你一次:

删除

的第二次出现
listofstrings = removefirst(listofstrings);

在这里,你弹出一个元素,但它会丢失,因此你的树是不正确的。 请记住,我们已经找到了构建树的正确方法。

BTW,

是什么垃圾
         if(root == null)
         {
         root = newnode;
         }

这将你漂亮,纯粹的递归方法耦合到某个特定的全局变量,并使其产生副作用! 如果您需要在某处分配构建树的结果,为什么不在您首先调用createExpressionTree的地方进行。

ExpressionTree root = createExpressionTree(tokenList);