利用二叉樹實現中綴表示式的計算

2021-09-25 04:20:16 字數 1459 閱讀 3177

之前按照資料結構的課本(李忠月版)實現了利用兩個棧來進行中綴表示式的計算,下面這段**可以實現利用二叉樹來進行中綴表示式的計算,計算過程中不適用棧,僅利用二叉樹的後序遍歷思想。

#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...