【发布时间】:2013-08-31 22:54:51
【问题描述】:
typedef struct _Tree{
int val;
struct _Tree *left;
struct _Tree *right;
}Tree;
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);
}
【问题讨论】:
-
关于最后一个问题,如果你的
insert()有可能修改传入指针的值,那么你需要通过地址(即指针指向指针)。这对于传递可以修改的头/根指针的列表/树代码很常见。或者,您可以使用insert()函数 return 新的指针值,但我更喜欢前一个选项,因为我喜欢我的 API 来管理列表/树;不依赖 调用者 通过覆盖保存新的头/根。
标签: c struct tree binary-tree