中綴表示式生成二叉樹

2022-03-13 17:28:31 字數 2824 閱讀 2984

中綴表示式生成二叉樹,大概應該有遞規,迭代,和編譯原理中的自頂向下的**分析法等。

遞規,迭代的思路每次讀出乙個數字,乙個運算子,比較當前運算子和之前符號的優先順序,進行相關的操作。

自頂向下的**分析法,做了下,實在忘記的差不多了,先占個位。以後完成。

tree.c

#include "

head.h

"struct node * createnodesetv(int number,char opr,int

type)

;void createnode(struct nodedata nd,struct node *myn)

;char insertnode(struct node * mynode,struct node * father,char

lr)

else

}else

else

}return

result;}//

原來樹的遍歷也就是遞迴.我去,我說自己怎麼老是不得要領.根源在於沒想明白遞迴函式.

void visittree(struct node *root)

else

if(root->ndata.symboltype==1

)

else

if(root->rchilden!='\0'

)

else}//

所以如果用遞迴來做運算必須是後序遍歷,要等左右樹都有結果了,才用符號。

//其實我們的心算和筆算,也是後續遍歷。

int visittree_2(struct node *root)

else

if(root->rchilden!='\0'

)

else

switch (root->ndata.operatorvalue)

case'-

':case'*

':case'/':}

return

result;

}

head.h

//

tree

struct

nodedata

;struct

node

;char insertnode(struct node * mynode,struct node * father,char

lr);

struct node * createnodesetv(int number,char opr,int

type);

void createnode(struct nodedata nd,struct node *myn);

void visittree(struct node * root);

1)迭代方法

main.c

基本思路就是我們手工畫圖的步驟。寫成**而已。

每次取乙個數字和操作符,對比操作符和之前操作符的優先順序。

狀1,大於,則符號為之前樹的右子樹,數字為符號的左子樹。

狀2,小於,則數字為之前樹的右字樹,之前樹為符號的左子樹。

直至最後,只有乙個數字符,此數字為之前符號的右子樹,

int

main()

else

else

if (lheight(preope,coperator)==0

)

}else

//last char}}

if(rootnode!='\0'

)

return0;

}int getstrlen(char *c)

returni;}

int lheight(char oldc,char

newl)

}else

if(oldc=='#'

)

return0;

}

2) 遞規方式。

尾遞規一般是可以用迴圈迭代來表示。所以這裡遞規其實並不是很體現優勢。

只是可以鍛鍊下遞規的思路,遞規是:把問題難度逐層降低,以至到達某個層次(一般0或1),是個確定的操作不需要遞規,那麼這個層次的上層的操作也變成了確定操作。以至最終解決問題。

這裡一樣的思路:乙個表示式很長,我只能解決乙個數字,乙個操作符,並把他放到之前的樹上。剩下的表示式也就是遺留的問題讓下層去做。下層能做的事和上面一樣。以至到最後,只剩下乙個數字,只能防到右葉,遺留的問題,到這裡終結。

mian.c

void createtree(char * expression,struct node * prenode,char

preope);

struct node * root='\0'

;int

main()

return0;

}void createtree(char * expression,struct node * prenode,char

preope)

else

}else

if (lheight(preope,coperator)==0

)

createtree(expression+2

,prenode,preope);

}else

}

3)自頂向下的**分析。

做了下,沒出來。以後看看。

二叉樹計算中綴表示式

看到 資料結構 思想與實現 這本書裡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 分為左子樹,根,右子樹 再繼續把每個拆分成三部分,...

根據中綴表示式構建二叉樹

本文從中綴表示式轉字尾表示式開始,循序漸進介紹根據中綴表示式構建二叉樹的過程。從左往右遍歷中綴表示式,無視空格 遇到運算元直接輸出 遇到操作符通過按照以下規則處理 在遍歷完中綴表示式時讓操作符棧的最後元素出棧 例子 將 2 5 3 1轉換為字尾表示式 基於上面中綴表示式轉字尾表示式的步驟,新增乙個運...