我正在製作一個二叉樹,當我向樹中添加一個新的字符串節點時,我必須先搜索以查看該節點是否已經存在。如果是這樣,我需要將其值增加1,而不是將其添加到其他節點。我需要一個數據結構來保存兩種數據類型
哪個數據結構最適合這樣做?
我正在製作一個二叉樹,當我向樹中添加一個新的字符串節點時,我必須先搜索以查看該節點是否已經存在。如果是這樣,我需要將其值增加1,而不是將其添加到其他節點。我需要一個數據結構來保存兩種數據類型
哪個數據結構最適合這樣做?
除非我誤解了你,否則你的問題很簡單。只需創建一個包含兩個成員變量的類:
public class Node {
v1 data_type_1;
v2 data_type_2;
}
將此用作二叉樹的節點。
這個答案很好,但是如果Node包含命名爲String和int的成員 – pamphlet 2013-03-27 18:38:44
咦,本質上也許
幫助。這是一個AVLTree的實現,它是一個平衡的二叉樹。我會用泛型類型(和我)來實現它,這樣你也可以存儲其他內容。
在我的情況下,它被用作索引結構,它應該能夠被存儲在大部分的主內存中(但也包括使用版本控制算法的磁盤表示)。我正在存儲一個字符串/路徑組合(鍵)和一組簡單的屬於路徑(值)的ID。
但是,您可能必須將兩個「指針」存儲到兩個子節點或兩個節點對象的內存中引用。
編輯:您可能還需要從谷歌番石榴即將BinaryTreeTraverser一眼:https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/collect/BinaryTreeTraverser.java
巴尼的回答是好。但要更具體地回答您的問題,您可能希望節點類看起來像:
public class Node
{
String value;
int count;
Node leftChild;
Node rightChild;
}
您將爲您的樹創建這些實例。其中一個例子就是「根」。所有其他實例將通過leftChild
和rightChild
直接或間接掛起。
祝你好運!
所以結構的座右銘是通過減少重複次數來減少內存。並按排序順序存儲數據。
然後這個節點可以用於你的樹。
public class node
{
String value;
int count;
node left;
node right;
}
但還有更好的解決方案,然後這甚至是TreeMap的,因爲這裏搜索需要O(1)(重複計數增量相當於搜索)在前面的情況下爲O(日誌(N))。
Map testTreeMap = new TreeMap();
if(testTreeMap.get(MyString)!=null)
{
testTreeMap.put(MyString, testTreeMap.get(MyString) +1)
}
else
{
testTreeMap.put(MyString , Integer(count)) // count=1
}
有了這個,你完全完成了..!
http://tutorialswithexamples.com/java-treemap-tutorial-and-examples/
只需要一個帶有字符串和計數器的節點類。 – 2013-03-27 18:33:59
任何DataStructure都可以工作,它只關心你如何讀取字符串並在最後附加一個Integer。所以即使是一個帶整數前綴的字符串也可以工作 – 2013-03-27 18:36:10
是真的,但我不清楚這是「最好的」。 – pamphlet 2013-03-27 18:37:13