c - 在关联数组中查找此数据的最佳算法?

标签 c algorithm binary-tree associative-array depth-first-search

我现在正在做一项实验室作业,制作一款 Hangman 游戏,我正在尝试解决一个特定的功能。我有一个关联数组,它只是一个二叉树,其中每个节点都是一个键/值对,键是一个字符串,值是一个字符串 vector 。这些功能对于我的问题并不重要。我需要知道的是……

我需要返回一个指向包含树中最大元素数的 vector 的指针。我试图找到一种方法来通过深度优先搜索来做到这一点,但我不太清楚要比较什么以及如何跟踪所有内容。

有人可以给我伪代码或如何做到这一点的想法吗?

编辑:这是我当前的算法。

GENERIC_VECTOR* find_greatest(Node* root, MYSTRING* pattern) {
    if(root != NULL) {
        GENERIC_VECTOR* left = find_greatest(root->left, pattern);
        GENERIC_VECTOR* right = find_greatest(root->right, pattern);
        int sizeL = generic_vector_size(*left);
        int sizeR = generic_vector_size(*right);
        int sizeT = generic_vector_size(root->data->value);
        if(sizeL > sizeR) {
            if(sizeL > sizeT) {
                mystring_destroy(pattern);
                *pattern = mystring_copy(root->left->data->key);
                return left;
            } else {
                mystring_destroy(pattern);
                *pattern = mystring_copy(root->data->key);
                return &(root->data->value);
            }
        } else {
            if(right != NULL) {
                if(sizeR > sizeT) {
                    mystring_destroy(pattern);
                    *pattern = mystring_copy(root->right->data->key);
                    return right;
                } else {
                    mystring_destroy(pattern);
                    *pattern = mystring_copy(root->data->key);
                    return &(root->data->value);
                }
            } else {
                mystring_destroy(pattern);
                *pattern = mystring_copy(root->data->key);
                return &(root->data->value);
            }
        }
    } else return NULL;
}

最佳答案

由于您的 DS 是一棵树,因此您必须使用其中一种树遍历算法(即中序、前序或后序):

伪代码:

global int maxval = -1;
global NODE *max = NULL; // this pointer will contain the result!

getMaxVal(NODE *n){
    if(n!==NULL){
        if( n->val[key].length > maxval ){
            maxval = n->val[key].length;
            max = n; 
        }
            getMaxVal(n->left);
            getMaxVal(n->right); 
    }
}

关于c - 在关联数组中查找此数据的最佳算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460372/

相关文章:

c - 这些数据需要什么样的数据模型?

regex - 如何编写代码以识别正则表达式是否与给定字符串匹配?

algorithm - 如何求一个数的 N 的补数?

c - C 中的速度胜过风格?

c - block 错误的openmp

algorithm - 动态规划的复杂组合条件

c# - ReheapUp 和 ReheapDown 递归到迭代的转换 C#

c - 我无法正确释放二叉树,我该如何调试它?

c# - 如何迭代地在二叉搜索树中添加元素?

c - 使用单指针代替双指针