结构名称是指针吗?

hel*_*ing 2 c tree binary-tree struct

typedef struct _Tree{
    int val;
    struct _Tree *left;
    struct _Tree *right;
}Tree;
Run Code Online (Sandbox Code Playgroud)

这是Tree一个指针吗?它是否指向val的地址?

如果我定义的话怎么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);
}
Run Code Online (Sandbox Code Playgroud)

ver*_*ose 5

Tree不是指针.它是用户定义类型的别名struct _Tree.因此,当您声明一个新变量时,而不是键入

struct _Tree foo;
Run Code Online (Sandbox Code Playgroud)

你可以简单地输入

Tree foo;
Run Code Online (Sandbox Code Playgroud)

两者是等价的.

如果你宣布

Tree *node;
Run Code Online (Sandbox Code Playgroud)

*C中的一元运算符是取消引用/间接运算符,所以你所说的是:*node或者,取消引用的值node是a Tree.或者换句话说,node是指向a的指针Tree,即指向a的指针struct _Tree.

在为其分配内存之前,此指针未初始化:

node = malloc (sizeof (Tree));
Run Code Online (Sandbox Code Playgroud)

在分配此内存之前,指针指向某个未定义的位置.分配内存后,您可以val像这样插入节点:

node->val = val;
Run Code Online (Sandbox Code Playgroud)

如何将其node自身插入二叉树是一个有趣的问题.你有什么尝试?