我现在正在做一个实验室作业,以制作一个Hangman游戏,而且我正在尝试解决这个问题。我有一个关联数组,它只是一个二叉树,每个节点都是一个键/值对,键是一个字符串,值是一个字符串向量。这些功能对我的问题并不重要。我需要知道的是......
我需要返回一个指针,指向包含树中最多元素的向量。我试图通过深度优先搜索来找到一种方法来做到这一点,但我无法确定要比较的内容以及如何跟踪所有内容。
有人可以给我伪代码或者如何做到这一点吗?
编辑:这是我目前的算法。
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;
}
答案 0 :(得分:0)
由于您的DS是树,因此您必须使用其中一个树遍历算法(即,按顺序,按订单或后序):
PseudoCode:
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);
}
}