Java在树上实现函数
我正在处理一个问题,该问题要求我为给定的接口实现几个函数 我有一个接口是树中的单个节点,还有一个接口是树 TreeNode: 树: 我被要求: 使用最后一个子/上一个同级实现这些接口 方法创建MyTreeNode.java和MyTree.java,它们将扩展Tree和TreeNode MyTreeNode.java定义为: 扩展TreeNode.java的实现 MyTree.java定义为: 扩展Tree.java的实现 所以我开始构建MyTree.java。问题是,我不知道如何扩展接口和实现方法。对我来说,听起来好像是想让我实现接口并构造定义的方法。据我所知,只有一个接口可以扩展另一个接口 另一个问题是,如果没有适当的左、右节点,我将如何创建许多这样的函数?我认为我不允许修改现有的接口Tree.java和TreeNode.java 有谁能用外行的语言帮我解释一下我应该做什么吗?你们班需要,比如: 在java中,您只能扩展一个类,并实现一个接口。您是对的,只有接口可以扩展另一个接口。我认为问题在于创建一个实现接口的类 在您的实现中,您将定义适当的左和右节点。因此,在您要实现的每个特定函数中,您可以直接引用这些字段Java在树上实现函数,java,data-structures,tree,elements,Java,Data Structures,Tree,Elements,我正在处理一个问题,该问题要求我为给定的接口实现几个函数 我有一个接口是树中的单个节点,还有一个接口是树 TreeNode: 树: 我被要求: 使用最后一个子/上一个同级实现这些接口 方法创建MyTreeNode.java和MyTree.java,它们将扩展Tree和TreeNode MyTreeNode.java定义为: 扩展TreeNode.java的实现 MyTree.java定义为: 扩展Tree.java的实现 所以我开始构建MyTree.java。问题是,我不知道如何扩展接口和实现方
要回答您关于术语的问题: 是的,你是对的,你的导师/ TA根本没有准确地写出来,可能是因为它们来自C++背景,在接口/基类和扩展/实现之间没有严格的区分。我相信你的解释就是他们想要的 正如问题明确提到的,与接口中的第一个孩子、下一个兄弟姐妹相比,使用最后一个孩子、上一个兄弟姐妹来实现,我认为您不应该使用左/右来实现,这实际上意味着同时存储上一个孩子和下一个兄弟姐妹,这似乎违背了练习的目的。我认为他们只是把问题弄得很棘手,不现实,但找到方法很有趣 不存储下一个同级的一种方法是在节点(即父节点)中存储和附加属性。第一个孩子,下一个兄弟姐妹和最后一个孩子,上一个兄弟姐妹实际上是同一个东西,意思是代表
A
|
V
[B C D]
第一个孩子,下一个兄弟姐妹正在存储:
A
|
V
B -> C ->D
最后一个孩子,前一个兄弟姐妹,如果我猜对的话,是
A
+--------+
V
B <- C <-D (and B,C,D is storing a parent ref pointing to A)
只想告诉您如何实施两个关键方法,另一个留给您自己谢谢。我就是这么想的。您能推荐如何创建一个变量来保存根节点和左右子节点吗?我不确定这一点,因为界面不包括这些。非常感谢你澄清这个问题。我的教授有时会这样含糊其辞。我将如何准确地实现这些功能?我不知道下一步该怎么做,因为没有预定义的根或左/右子级。如果你的下一个孩子是左-右/上一个,这将非常容易,但我怀疑这是否是你教授想要的。让我用一些代码更新我已经更新了我的代码以适合你的伪代码。下面是我当前代码的粘贴库:我现在正在处理的是前序和后序遍历。然而,我不知道如果没有左撇子和右撇子,如何做到这一点。很抱歉,我没有完全理解,我对这一点还不熟悉。谢谢。无法在工作时看到您的pastebin代码。但是,如果实现了getFirstChild和getNextSibling,则后序/前序遍历应该是直接进行的。您的遍历代码可以简单地使用这些方法。e、 g.preOrderTraverse{resultList+=this;for n=firstChild;n!=null;n=n.getNextSibling{resultList+=n.preOrderTraverse;}`我还没有实现getFirstChild。我现在拥有的两个数据成员是lastChild和prevSibling,我看不出它们对getFirstChild有什么帮助。但我可能弄错了。我需要一些方法来访问下一个元素,而不是同一行的同级元素,但我没有这些数据成员。我会这样做吗我们不能为此目的创建一个吗?
A
|
V
[B C D]
A
|
V
B -> C ->D
A
+--------+
V
B <- C <-D (and B,C,D is storing a parent ref pointing to A)
/** Tree node implementation using "last-child-prev-sibling" */
MyTreeNode<E> implements TreeNode<E> {
MyTreeNode<E> parent;
MyTreeNode<E> lastChild;
MyTreeNode<E> prevSibling;
// I bet it is add child, which add a new child to the last
public void setChild(TreeNode<E> child) {
if (! (child instanceof MyTreeNode)) {
throw new SomeKindOfImpatibleTypeException();
}
MyTreeNode<E> newLastChild = (MyTreeNode<E>) child;
newLastChild.parent = this;
newLastChild.previousChild = this.lastChild;
this.lastChild = newLastChild;
}
public TreeNode<E> getNextSibling() {
if (this.parent == null) {
return null;
}
MyTreeNode<E> n = this.parent.lastChild;
if (n == this) {
return null;
}
for ( ; n != null; n = n.prevSibling) {
if (n.prevSibling == this) {
return n;
}
}
return null;
}
public TreeNode<E> firstChild() {
if (lastChild == null) {
return null;
}
for (TreeNode<E> n = lastNode;
n.prevSibling != null;
n=n.prevSibling) {
}
return n;
}
}