Java中的二叉树插入

Java中的二叉树插入,java,algorithm,Java,Algorithm,我有一个如下的清单。我想知道如何用Java创建具有这种列表类型的二叉树。有人能为我提供一些Java中的二叉树插入代码来处理这种类型的列表吗 例如: List 1: AND AND AND G M S T 二叉树将是: AND AND AND G M S T 对于此列表: List 2: AND AND G M S 二叉树将是: AND AND S

我有一个如下的清单。我想知道如何用Java创建具有这种列表类型的二叉树。有人能为我提供一些Java中的二叉树插入代码来处理这种类型的列表吗

例如:

List 1:  AND AND AND G M S T
二叉树将是:

       AND
   AND                AND 
 G     M            S     T
对于此列表:

List 2: AND AND G M S
二叉树将是:

              AND
  AND          S
 G   M          
我尝试了以下插入方法:

public void insert(RDFQuery node,  RDF leafValue) { 
    flag++;
    if ((flag%2)!=0) {
        if (node.left  != null) {
            flag--;
            nodeStore=node.left;
            leftFlag=1;
            insert(node.left, leafValue);
        } 
        else { 
              node.left = new RDFQuery(leafValue);
        }

    }       
    if ((flag%2)==0) {
        if (leftFlag==1) {
            node=nodeStore; 
            leftFlag=0;
        }

        if (node.right  != null) {
              flag--;   
              insert(node.right, leafValue);
        } 
        else { 
              node.right = new RDFQuery(leafValue);
              rightFlag=0;
        }
    }
}

我不确定你想怎样把你的列表变成树,因为我不能用我能想到的任何明显的算法来复制你的两个例子

按行填充,宽度优先 通常,我会从左到右填写一个级别,然后再继续下一个级别。对于示例输入,这将导致以下树:

列表2:和G M S
及
/   \
和G
/    \ 
M S
有多种方法可以实现这一点。一个是维护两个数字:当前插入的行的索引(即深度)和该行中新叶的索引。该行中该索引的位模式将告诉您左、右子级的顺序,从最重要位的根开始。深度会告诉你需要考虑多少位,即哪些位是你必须处理的最重要的。 前缀符号 另一方面,元素的名称表明其中一些元素具有固定的算术。我认为
在所有情况下都是二进制运算符,而简单的符号可能是空的。但是,根据这种解释,您的第一个示例将产生一个不同的列表:

和
/     \
及
/   \     /   \         
G M S T
及(及(G,M)及(S,T))
清单1:AND和G M和S T

如果这是您的解释,那么您最好保留对当前节点的引用,并在最后一个期望的子节点添加到该节点后,从父节点切换到父节点,直到到达仍然期望子节点的节点。

这些字符串是吗?还有,你试过什么?是的,这些是线。也可以将其视为二进制表达式树。我在树中插入时遇到问题。请编辑您的问题以更易读地显示代码。嗯。。。。我想如果第一个条件执行,node.left=null,由于“flag”值的递减,您将始终执行第二个条件。您可能希望将其更改为“else”,因为根据定义,如果标记为%2=0则标志%2==0,因此else更有意义。读取AND运算符并递归读取其左操作数和右操作数。当您到达一个终端(在您的例子中是G、M、S或T)时,您停止递归。