如何构建二叉树

时间:2017-09-29 10:16:32

标签: java linked-list

有用吗? 决定在inOrder数组中切换678和1789,将1789放在678的左边,将678放在678的右边。在下面的代码中

public static BinaryTreeNode buildTree(int inOrder[], int preOrder[], int 
preIndex )
{               
if (inOrder.length > 1)  
{
    int inIndex = 0;
    for (int i = 0; i < inOrder.length; i++)
    {
        if (preOrder[preIndex] == inOrder[i])
        {
            inIndex = i ;
            break;                  
        }
    }

    if (inIndex > 0)
    {          
        BinaryTreeNode node = new BinaryTreeNode(inOrder[inIndex]);

        if (preIndex < preOrder.length - 1 )
        {
        node.setLeft(buildTree(leftArray(inOrder, inIndex), preOrder, preIndex + 1));
        node.setRight(buildTree(rightArray(inOrder, inIndex), preOrder, inIndex + 1));  
        }

        return node;
    }           
}       
return new BinaryTreeNode(inOrder[0]);

}

2 个答案:

答案 0 :(得分:0)

此代码用于添加Node。您正在使用实际nextNode创建新节点,并将其设置为current.nextNode值。这是添加一个节点。

 Node<T> current = firstNode;
 for (int i = 1; i < pos; i++)
      current = current.nextNode;
 Node<T> temp = new Node<T>(value, current.nextNode);
current.nextNode = temp;

删除节点(比如该循环选择的当前节点)所需要的是将current.nextNode引用设置为previous.nextNode值。

类似:(未经测试的算法)

if(pos == 0) head = null;
else {
     Node<T> previous = head;
     Node<T> current = head.nextNode;
     for (int i = 1; i < pos; i++){
         previous = current;
         current = current.nextNode;    
     }
     previous.nextNode = current.nextNode;
}

答案 1 :(得分:0)

您的removeFrom方法代码应该看起来像这样:

0

正如您在上面的示例中所看到的,我返回的是值而不是节点,但您可以修改它,不要丢失节点,我将节点放在第39页; m在tmp节点变量中删除。如果您插入不可接受的值或位置,它将打印一个控制台消息,使用布尔变量我能够知道它是否存在。