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)
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自身插入二叉树是一个有趣的问题.你有什么尝试?