之前按照資料結構的課本(李忠月版)實現了利用兩個棧來進行中綴表示式的計算,下面這段**可以實現利用二叉樹來進行中綴表示式的計算,計算過程中不適用棧,僅利用二叉樹的後序遍歷思想。
#include#include#define init_size 10
#define incrementsize 10
typedef struct list
list;
typedef struct snode
snode,*linkstack;
typedef struct tnode
tnode,*tree;
int initlist(list*l)
(*l).length = 0;
(*l).size = init_size;
return 0;
}int initstack(linkstack *s)
(*s)->next = null;
return 0;
}int inittree(tree *t)
(*t)->lchild = null;
(*t)->rchild = null;
return 0;
}int push(linkstack s,char e)
p->data = e;
s->next = p;
p->next = s->next;
return 0;
}int pop(linkstack s)
int gettop(linkstack s)
tree createtree(list l,int first,int last)
int i,flag=0,addsub=0,timediv=0;
for(i=first;idata = l.elem[addsub];
t->lchild = createtree(l,first,addsub);
t->rchild = createtree(l,addsub+1,last);
}else if(timediv!=0)
return t;
}int calculate(tree t)
a = calculate(t->lchild);
b = calculate(t->rchild);
if(t->data == '+')
if(t->data == '-')
if(t->data == '*')
if(t->data =='/')
else
}int main()
}l.length++;
}t = createtree(l,0,l.length);
result = calculate(t);
printf("the result is %d \n",result);
return 0;
}
二叉樹計算中綴表示式
看到 資料結構 思想與實現 這本書裡5.3的程式 給出的程式是有問題的 敲到vs中,發現右閉括號不能起到作用,例如 輸入 3 5 7,輸出則是38,右閉括號沒有起到作用。自己調了很久,終於修改對了,下面是正確的 include using namespace std class calc struc...
中綴表示式轉二叉樹
關於中綴表示式轉二叉樹,其實很簡單,只要記住這幾句話就夠了 就這麼簡單 這樣說可能還有人聽不懂 舉個栗子 a b c d e fa b c d e f a b c d e f從左到右遍歷表示式,找到最後計算的字元 分成3部分 a b c d e f 分為左子樹,根,右子樹 再繼續把每個拆分成三部分,...
中綴表示式生成二叉樹
中綴表示式生成二叉樹,大概應該有遞規,迭代,和編譯原理中的自頂向下的 分析法等。遞規,迭代的思路每次讀出乙個數字,乙個運算子,比較當前運算子和之前符號的優先順序,進行相關的操作。自頂向下的 分析法,做了下,實在忘記的差不多了,先占個位。以後完成。tree.c include head.h struc...