作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要帮助为我的 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/
我是一名优秀的程序员,十分优秀!