За единичен списък с връзки
1.1. Това видях от един урок, написах само важната част.
sortedInsert(Node **root, int key){}; int main(){ Node *root = &a; sortedInsert(&root, 4); }
1.2. Въпреки това току-що използвах показалец вместо двоен показалец и всичко работи добре, мога да вмъкна ключа успешно.
sortedInsert(Node *root, int key){}; int main(){ Node *root = &a; sortedInsert(root, 4); }
За двоично дърво
2.1. От урока (двоен показалец)
void insert_Tree(Tree **root, int key){
}
int main(){
Tree *root = NULL;
insert_Tree(&root, 10);
}
2.2. това, което направих, е по-долу и не успях да вмъкна ключа, когато проверих възела след вмъкването, възелът все още е нулев. (единичен указател)
void insert_Tree(Tree *root, int key){
if(root == NULL){
root = (Tree *)malloc(sizeof(Tree));
root->val = key;
root->left = NULL;
root->right = NULL;
cout<<"insert data "<<key<<endl;
}else if(key< root->val){
insert_Tree(root->left, key);
cout<<"go left"<<endl;
}else{
insert_Tree(root->right, key);
cout<<"go right"<<endl;
}
}
int main(){
Tree *root = NULL;
insert_Tree(root, 10);
}
имам няколко въпроса
1). кое е правилно, 1.1/2.1 двоен показалец или 1.2/2.2 единичен показалец? Моля, обяснете подробно, може да е по-добре, ако можете да покажете пример, мисля, че и двамата са прави.
2). Защо вмъкнах ключ успешно в свързания списък с един указател, но не успях при вмъкването на дърво с един указател?
Благодаря много, оценявам помощта на всички.