gpt4 book ai didi

java - 如何为带有堆栈的 Iterator 类设置构造函数?

转载 作者:行者123 更新时间:2023-12-02 06:26:00 27 4
gpt4 key购买 nike

我需要帮助为我的 Iterator 类设置此构造函数。方向如下:

构造函数应该创建一个新的堆栈并将其节点参数压入其中,然后是所有左子项均可通过参数访问。考虑一种情况,其中树包含仅包含左 child (本质上是一个链接列表)。具有最高值的节点(根)将首先被插入堆栈的底部,然后是其左子元素,位于其上方堆栈,然后是其左 child ,依此类推,直到叶子,其中包含最低值在树上。当从堆栈中弹出节点时,它们将包含从最低到最高的值最高...有序遍历。

我不知道如何创建一个新的堆栈,参数中的节点是 BSTNode 类型。

这是我的代码:

public static class Iterator<E>
{
private Stack<BSTNode<E>> stack;

public Iterator(BSTNode<E> node)
{

}
public boolean hasNext()
{
if(stack.peek() != null)
{
return true;
}
else
{
return false;
}
}
public E next()
{
stack.pop();
E value;
value = (E) stack.pop();
return value;
}
}

现在,忽略其他两个方法,我只需要 Iterator 方法的帮助。我稍后会弄清楚这些。谢谢。

我发现我的问题出在不同的类和方法中。我将其设置为这样,我想知道这是否是正确的方法。

此方法的说明是

创建并返回静态嵌套 Iterator 类的实例,该实例将用于迭代树中的元素。树的根最初应该传递给迭代器构造函数。

这是我为该方法所做的以下代码:

 public Iterator<E> iterator()
{
return new Iterator<>(root);
}

根是二叉搜索树的顶部。它在该类中作为私有(private)变量。

最佳答案

这是我的设置方法。

这只是高于类(Class)的公众。不在类(class)内。我只是返回一个新的迭代器,其中 root 是最高值。

public Iterator<E> iterator()
{
return new Iterator<>(root);
}

然后在它下面的类中,我创建一个新堆栈,并让该堆栈将节点和左侧的节点推送(只要它不为空)。

public static class Iterator<E>
{
private Stack<BSTNode<E>> stack;

public Iterator(BSTNode<E> node)
{
this.stack = new Stack<>();
while (node != null)
{
stack.push(node);
node = node.left;
}
}
public boolean hasNext()
{
return !stack.isEmpty();
}
public E next()
{
BSTNode<E> goodDays = stack.pop();
E result = goodDays.data;
if (goodDays.right != null)
{
goodDays = goodDays.right;
while (goodDays != null)
{
stack.push(goodDays);
goodDays = goodDays.left;
}
}
return result;
}
}

关于java - 如何为带有堆栈的 Iterator 类设置构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55786088/

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