二叉树 - 计算不同的节点

时间:2016-03-10 06:02:43

标签: c++ tree size binary-search-tree

如果我被问到二进制树中节点的数量,那将很容易,但我被要求计算二进制树中不同节点的数量,如下所示。 有两个12值! binary tree

二叉树算法中的节点数是:

struct Node {
    string data;
    struct Node *left;
    struct Node *right;
};

int getNumberOfNodes(Node* node)
{
    if (node != NULL)
        return getNumberOfNodes(node->left) + 1 + getNumberOfNodes(node->right);
    else
        return 0;
}

但对于独特的价值观,它太难了-_-

2 个答案:

答案 0 :(得分:3)

您可以更改添加容器的功能,以维护您已遇到的值。评论getDate()中已建议使用最佳容器。

新代码将是:

std::set

与您的代码没那么不同。
最后,int getNumberOfNodes(Node* node, std::set<string>& uniqueValues) { if (node != NULL) { int count = 0; if ( uniqueValues.find( node->data ) == uniqueValues.end() ) { count = 1; uniqueValues.insert ( node->data ); } return getNumberOfNodes(node->left,uniqueValues) + count + getNumberOfNodes(node->right,uniqueValues); } else return 0; } 将等于返回的int 在调用函数之前清除uniqueValues.size()

答案 1 :(得分:0)

int count_label(Node *root, int data)
{
    int count_of_data = 0;
    if(root == NULL)
    return 0;
    if(data == root->data)
    count_of_data += 1;
    if(data > root->data)
        count_of_data += count_label(root->right,data);
    else
        count_of_data += count_label(root->left,data);

    return count_of_data;
}
//--------------------------------------------------------
unsigned int unique_nodes(Node *root)
{
    int count_u = 0;
    if(root == NULL)
        return 0;
    if(count_label(root, root->data) == 1)
    {
        count_u += 1;
    }
    count_u += unique_nodes(root->left);
    count_u += unique_nodes(root->right);
    return count_u;
}