[英]Java Tree Struct & Breadth-first-search
我基于根节点创建了一个简单的参数化树结构。 每个节点均包含其子注释的数组列表以及指向其父项的链接。 那很简单。
现在,我无法解决(不久的将来)的问题:
我想在这棵树上写广度优先搜索。 我想借助(已实现的)迭代器接口来实现此功能。 但是我真的无法解决这个问题:问题是同样可迭代的List结构。 我不知道如何实现hasNext(),next()和remove()函数:/
你有什么主意吗?
问候
码:
public class Tree<T> implements Iterator<T>{
private Node<T> root;
/**
* Default constructor.
*/
public Tree() {
super();
}
/**
* Return the root Node of the tree.
* @return the root element.
*/
public Node<T> getRoot() {
return this.root;
}
/**
* Set the root Element for the tree.
* @param Root the root element to set.
*/
public void setRoot(Node<T> Root) {
this.root = Root;
}
...
和
公共类Node {
public List<Node<T>> children;
public Node<T> parent;
public T data;
/**
* Default constructor.
*/
public Node() {
super();
}
/**
* Create a Node<T> with an instance of T.
* @param data an instance of T.
*/
public Node(T nodeData) {
this();
setData(nodeData);
}
/**
* Create a Node<T> with an instance of T.
* @param data an instance of T.
*/
public Node(T nodeData, Node<T> parentNode) {
this();
setData(nodeData);
setParent(parentNode);
}
...
您的iterator()
方法将创建一个Iterator<Node<T>>
,它将使用仅包含根的Queue<Node<T>>
进行初始化。
Iterator.next()
将从堆栈中获取第一个元素,将其所有子元素插入堆栈,然后将其返回。 [别忘了也弹出]
Iterator.remove()
将删除从其父列表中的最后一个元素children
[您可以访问使用父parent
领域。
还要注意,从语法上讲,您应该实现Iterable<T>
而不是Iterator<T>
。 您将创建的迭代器(如上所述)将实现Iterator<T>
您的Node
类需要实现Iterable
接口,而不是`Iterator'接口。
Iterable
接口本质上说“该类可以返回一个迭代器并对其进行迭代”,而Iterator
接口则说“我可以对某些事物进行迭代并返回那些项”。 Iterable
接口需要Iterator
的实现才能起作用。
这是一个简短的,人为的示例(未经测试,但您应该了解要点)。
public class MyList implements Iterable<Integer> {
public List<Integer> x;
public Iterator<Integer> iterator() {
return new MyListIterator(this);
}
}
这将是该类的一个简单迭代器:
public class MyListIterator implements Iterator<Integer> {
private List<Integer> list;
private int index;
public MyListIterator(MyList list) {
this.list = list;
this.index = 0;
}
public boolean hasNext() {
return this.index < this.list.x.size()
}
public Integer next() {
Integer i = this.list.x.get(this.index);
this.index += 1;
return i;
}
public void remove() {
//Not implemented
}
}
它可以帮助您了解如何显式使用迭代器:
MyList list = new MyList();
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.