c - 我想使用递归创建二叉树。我的以下代码有什么问题?

标签 c tree

#include<stdio.h>
#include<stdlib.h>

struct bt{

struct bt *left;
int data;
struct bt *right;
};

struct bt *root,*p1 = NULL;

struct bt* create_bt(struct bt*);

main(){

p1 = create_bt(root);
printf("Binary tree created\n");
}

struct bt* create_bt(struct bt *root){

int a;
printf("Enter data:");
scanf("%d",&a);
if(a == -1){
    root = NULL;
        }
else{
    root = (struct bt*)malloc(sizeof(struct bt));
    root -> data = a;
    root -> left = create_bt(root -> left);
    root -> right = create_bt(root -> right);
    printf("%d\n",root -> data);
    p1 = root;
    }
return p1;
}

最佳答案

声明: else 部分中的 p1 = root; 应该位于 else 语句之外,以便如果 a==-1 则返回 NULL 并且左/右子元素被标记为无效的。 除此之外,您的代码在构建二叉树时似乎是正确的。 希望这会有所帮助。

关于c - 我想使用递归创建二叉树。我的以下代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34496101/

相关文章:

不同类类型节点的 C++ 树/森林结构

c - 帮助追踪 mingw 上 "probe"(?) 中的段错误

Python 使用对象列表迭代对象

java - 将中缀表达式(带括号)转换为二叉树

c# - 从其他文件夹加载dll

c++ - 如何在 htmlcxx C++ 库中显示标签属性?

c - 在 C 中为二叉树实现 'insert' 函数

c - 类似 Ajax 的加载,以及太多的 getchars

c - c 中替代用户输入的替代函数

c - 如何使用 fscanf 从顺序访问文件读取时间戳?