一想到二叉树的创建,很自然的我们会写出这样的代码
int create_tree(binary_node** b){
char c;
scanf("%c",&c);
if (c == '#'){
*b = NULL;
}else{
//这里注意,如果传入进来的只是*b 那么走到这里重新分配内存空间之后就不是在操作实参了。
*b = (binary_node*)malloc(sizeof(binary_node));
if (b == NULL)
return ERROR;
(*b)->data = c;
create_tree(&(*b)->left);
create_tree(&(*b)->right);
}
};
//preorder traversal
void preorder(binary_node* b){
if(b != NULL){
printf("%c,",b->data);
preorder(b->left);
preorder(b->right);
}
}
int main() {
setbuf(stdin,NULL);
//传递指针的指针(改成传递指针的引用也是可以的),
//还有一种创建的时候直接将Node作为函数返回值返回的比我写的这种方式写起来简单一点
binary_node* b = NULL;
create_tree(&b);
printf("pre order\n");
preorder(b);
printf("\n");
std::cout << "Hello, World!" << std::endl;
return 0;
}
先序创建和遍历。
想创建上面这个二叉树,我直接输入了abdc,然而发现并不退出。事实证明如果要找到退出条件#,也就是得把节点的空也输入进去
实际上我们应该输入一个这样的二叉树,把空节点也输入进去才能保证递归有退出
测试结果
版权声明:本文为qq91752728原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。