我是一個新手在編程和工作在AVL樹atm的實現。我遇到了很多問題,並且在其中的一個問題上尋求幫助,之後我可能會修復其他問題,因爲它們聽起來都很相似。在C,InOrder(和其他功能)的AVL樹不工作
我打印樹序如下功能:
void AVL_in_order_walk(AVLTree* avlt)
{
if(avlt!=NULL){
AVL_in_order_walk(avlt->root->left);
printf("%d",avlt->root->value);
AVL_in_order_walk(avlt->root->right);
}
}
這似乎是相當錯誤的。我得到以下警告:
passing argument 1 of ‘AVL_in_order_walk’ from incompatible pointer type [enabled by default]
AVL_in_order_walk(avlt->root->left);
我得到了幾個像這樣的錯誤/警告/筆記。我認爲我有一個很大的問題,只是理解這一點:當我有一個像上面發佈的in_order_walk這樣的函數時,函數不會得到一個節點,它會得到整個樹。我習慣於通過樹或insertFunctions進行幾次散步,但函數始終有一個節點,因爲它被稱爲「void Function(Node * X)」。現在我有整棵樹(AVLTree * avlt),我似乎無法使用遞歸,因爲這樣,我錯了嗎?
BTW: 的Structs的樹和節點:
struct AVLTree
{
struct AVLNode* root;
int numberOfNodes;
};
struct AVLNode
{
struct AVLNode* left;
struct AVLNode* right;
struct AVLNode* parent;
int value;
int height;
};
如何其稱爲:
void AVL_in_order_walk(AVLTree* avlt);
我真的很感激任何形式的幫助,因爲我只是不明白..
'無效AVL_in_order_walk(AVLTree * AVLT);'這是一個功能_declaration_,不是一個函數_call_。 – Olaf
當然,這是我的不好。我把它稱爲「AVL_in_order_walk(avlt);」 – ykykyk
在遞歸調用 - AVL_in_order_walk(avlt-> root-> left)中,傳遞的參數是類型(AVLNode *),而函數需要類型參數(AVLTree *)。函數調用同樣的問題 - AVL_in_order_walk(avlt-> root-> right); –