2013-04-23 49 views
-2

我对BinarySearchTree节点中的Key和Value之间的区别是什么感到困惑。 Key的重点是什么?难道你不能仅仅依靠价值来建立BST吗?以下是包含Key和Value的两个代码示例。它们是我从两个不同来源获得的两种不同代码。二叉搜索树 - Value和Key有什么区别?

template<typename Key, typename Value> 
class Node 
{ 
private: 
public: 
Node<Key, Value>(Key key, Value value) 
{ 
this->key = key; 
this->value = value; 
N = 1; 
left = NULL; 
right = NULL; 
}; 
Node* left; 
Node* right; 
Key key; 
Value value; 
int N; 
}; 

而第二段代码是;

void insert(int value) 
{ 
    if(root == NULL) 
     root = new Node(value); 
    else 
     insertHelper(root, value); 
} 

void insertHelper(Node* node, int value) 
{ 
    if(value < node->key) 
    { 
     if(node->leftChild == NULL) 
      node->leftChild = new Node(value); 
     else 
      insertHelper(node->leftChild, value); 
    } 
    else 
    { 
     if(node->rightChild == NULL) 
      node->rightChild = new Node(value); 
     else 
      insertHelper(node->rightChild, value); 
    } 
} 
+1

值只是连接到节点的东西。如果你喜欢,它就是节点的有效载荷。 – 2013-04-23 16:57:07

+0

另外,关键类型有更多的接口需求,而值类型通常只需要可复制。 – StoryTeller 2013-04-23 16:58:39

+0

那么,如果价值是节点价值,那么关键是什么?比方说,我正在制作一个数字列表,并且我希望节点值为10,我将如何制作密钥以及它的重点是什么? – user2130537 2013-04-23 16:58:55

回答

2

值只是连接到节点的东西。如果你喜欢,它就是节点的有效载荷。它是一个任意的原始类型或对象。

该键用于确定将节点插入树的位置。请注意,Value并没有参与开发和维护像Key一样的树结构。

Nik提供了一个很好的比喻:节点是一个容器。值是你放入容器的内容,关键是你如何标记容器,以便以后可以检索。

+0

那么,如果我正在制作一个数字列表,那么一个关键的例子是什么? – user2130537 2013-04-23 17:02:08

+0

@ user2130537数字本身。将价值作为关键是没有问题的,但在大多数情况下它并不是非常有用的东西。 – 2013-04-23 17:03:07

+0

该号码是密钥。价值也可以是一个数字(甚至是相同的数字),但它也可以是数字的图像,或其他的东西。你看得到差别吗? – 2013-04-23 17:03:55