我的任务是创建一个程序,将((X+3)*(X+4))
之类的内容转换为二叉树,以及其他一些功能。到目前为止,我已经接受了输入,并将其解析为两个堆栈,一个包含操作数,另一个包含运算符。
我现在简单地定义了堆栈(因此它们只有一个nextnode和char value
。
但是,我似乎在将堆栈中的值添加到树中时遇到了问题(因此定义树时可能存在问题)。
我的堆栈定义如下:
typedef struct node
{
char value;
struct node * nextnode;
} node;
我的树被定义:
typedef struct tree
{
node * thisNode;
struct tree *right, *left;
} tree;
我不确定节点*部分,也许它应该是不同的东西。
我一直在考虑2 + 3的简单案例。在这种情况下,树的根应为+,左边为2,右边为3.
+
/\
2 3
如何将堆栈中的内容添加到我的树中?我尝试过使用
root->thisNode = operatorTop;
其中operatorTop是运算符堆栈的顶部(定义为node * operatorTop
),
但即便是这条简单的线条似乎也是分段错误。
答案 0 :(得分:4)
也许问题是你没有调用malloc()
为root
预留空间。
(编译器会报告空指针赋值,但是因为你指向一个随机位置,所以在null点取消引用时会出现段错误。)