2011-11-23 86 views
0

我在本書中做了一個問題,要求我爲具有以下變量的類編寫構造函數和複製控件成員。有人可以給我一個場景/例子,這個類是有用的嗎?主函數中可能有一些代碼?我感到困惑的部分是爲什麼它需要TreeNode * left和TreeNode *。我想不出使用它們。這個班級真的做什麼?

#include <iostream> 
#include <string> 
using namespace std; 
class TreeNode 
{ 
public: 
    //constructor 
    TreeNode(const string& s, const int& n, const TreeNode& lm, const TreeNode& rm): 
     value(s), count(n), left(new TreeNode(lm)), right(new TreeNode(rm)) {} 
    //copy-constructor 
    TreeNode(const TreeNode& m): value(m.value), count(m.count), left(new TreeNode(*m.left)), right(new TreeNode(*m.right)) {} 
    //assignment operator 
    TreeNode& operator=(const TreeNode& m) 
    { 
     value = m.value; 
     count = m.count; 
     *left = *m.left; 
     *right = *m.right; 
     return *this; 
    } 
    //destructor 
    ~TreeNode() 
     { 
     delete left; 
     delete right; 
    } 
private: 
    string value; 
    int count; 
    TreeNode *left; 
    TreeNode *right; 
}; 
int main() 
{ 
    return 0; 
} 
+1

這是一個將字符串映射爲整數的二叉搜索樹詞典。 –

+0

@jweyrich我解除了它。它應該複製該值。對?它不應該改變基礎對象。 – ihm

回答

6

你可以使用這個類來存儲從二叉樹元素(參見http://en.wikipedia.org/wiki/Binary_tree)在這種情況下,左,右的成員可能是有意義的。

二叉樹例如用於以有序方式存儲數據。雖然插入元素的代價可能很高,但查找元素的速度非常快,複雜度爲O(log n)。

+0

非常感謝。我正在閱讀它。 – ihm

+0

@ihm:二進制搜索樹或它們更聰明的表兄弟都在C++庫中,名稱爲'std :: set'和'std :: map'。 –