有用吗? 决定在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]);
}
答案 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节点变量中删除。如果您插入不可接受的值或位置,它将打印一个控制台消息,使用布尔变量我能够知道它是否存在。