typedef struct _Tree{
int val;
struct _Tree *left;
struct _Tree *right;
}Tree;
Tree
Указатель здесь? Указывает ли он на адрес val?Является ли struct name указателем?
Как насчет этого, если я определяю Tree *node
? Есть node
указатель, указывающий адрес Tree
?
если мы хотим вставить val
, следует ли использовать insert(&node)
или insert(node)
?
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);
insert_Tree(&root, 20);
insert_Tree(&root, 5);
insert_Tree(&root, 100);
}
Что касается последнего вопроса, если ваш 'insert()' должен потенциально модифицировать * значение * передаваемого указателя, то вам необходимо передать его по адресу (то есть указателю на указатель). Это является общим для кода списка/дерева, который передает указатель head/root, который может быть изменен. В качестве альтернативы вы можете использовать функцию «insert()' function * return * новое значение указателя, но я предпочитаю использовать прежний вариант, так как мне нравится, что мои API управляют списком/деревом; не полагайтесь на * caller *, чтобы сохранить новый заголовок/корень путем перезаписывания. – WhozCraig