我想在自己的TreeSet類中實現一個Iterator。 但是,我的創建它的嘗試只能在當前節點爲根的情況下才有效。 迭代器看起來是這樣的:如何在二叉樹中找到下一個繼承者?
構造:
public TreeWordSetIterator()
{
next = root;
if(next == null)
return;
while(next.left != null)
next = next.left;
}
hasNext:
public boolean hasNext()
{
return next != null;
}
下一頁:
public TreeNode next()
{
if(!hasNext()) throw new NoSuchElementException();
TreeNode current = next;
next = findNext(next); // find next node
return current;
}
FindNext中:
private TreeNode findNext(TreeNode node)
{
if(node.right != null)
{
node = node.right;
while(node.left != null)
node = node.left;
return node;
}
else
{
if(node.parent == null)
return null;
while(node.parent != null && node.parent.left != node)
node = node.parent;
return node;
}
}
這工作得很好,直到我到達我的根節點。所以我只能遍歷根的左邊的孩子,而不是正確的。任何人都可以給我一些關於我在做什麼錯誤的提示嗎?我不期望一個解決方案,只是一些提示。
問題:如何在給定每個節點指向其父,左孩子和右孩子的TreeSet中找到下一個節點。
在此先感謝
你到底想幹什麼?這個問題沒有說清楚。 –
您的next()方法是不完整的。我們需要看到它被稱爲上下文。特別是!hasnext()方法是未定義的旁邊 – ErstwhileIII
「直到我得到我的根節點」變量。請澄清。 – aliteralmind