【发布时间】:2015-05-24 21:34:01
【问题描述】:
我正在尝试创建这样的二叉树:link
输入将由用户作为前缀输入并作为字符串读取,然后放入二叉树。
这是我目前所拥有的:
struct node{
char val;
struct node *left;
struct node *right;
};
typedef struct node root;
typedef root *tree;
主要:
void main(){
int i;
tree tr;
char* s;
s=input(); //input function
tr=create_empty_tree();
for(i=0;s[i]!='\0';i++){
tr=add_root(s[i],ab);
}
convert_infix(tr);
}
这是我几天来一直在苦苦挣扎的部分;我似乎无法正确构建树。 这是我目前所拥有的:
tree add_root(char val, tree tr){
if ( tr == NULL ){
tr= create_root(val);
}
else{
if(val=="*" || val=="+" || val=="-" || val=="/"){
tr->left= add_root(val, tr->left);
}
else{
if(tr->left == NULL){
tr->left= add_root(val, tr->left);
}
else{
tr->right= add_root(val, tr->right);
}
}
}
return tr;
}
我在网上查了一下,知道是我的功能不对,我试过这样做:
插入新节点,每次向左移动,直到插入操作数。
回溯到最后一个算子,将下一个节点放到它的右边。
以同样的方式继续。
但我不知道如何回溯。 我已经在这几天了,我快疯了;我只是编程的初学者,所以请不要评判。
【问题讨论】:
-
实际上并不清楚您实际上在做什么。输入的格式是什么?如果您构建语法树,则节点包含不同的数据:例如运算符和操作数(对于简单的计算器)。操作数总是叶子,操作符总是分支。但这只是一个粗略的猜测。
标签: c data-structures binary-tree prefix infix-notation