1樓:匿名使用者
首先需要分配2個棧,乙個作為臨時儲存運算子的棧s1(含乙個結束符號),乙個作為輸入逆波蘭式的棧s2(空棧),s1棧可先放入優先順序最低的運算子#,注意,中綴式應以此最低優先順序的運算子結束。可指定其他字元,不一定非#不可。從中綴式的左端開始取字元,逐序進行如下步驟:
1)若取出的字元是運算元,則分析出完整的運算數,該運算元直接送入s2棧;若取出的是運算子,並且當前s1棧頂為(,則慧簡旁當前運算子直接入s1棧。
2)若取出的字元是運算子,則將該運算子與s1棧棧頂元素比較,如果該運算子優先順序大於s1棧棧頂運算子優先順序,則將該運算子進s1棧,否者,將s1棧的棧頂運算子彈出,送入s2棧中,直至s1棧棧頂運算前橡符低於(不包括等於)該運算子優先順序,則將該運算子送入s1棧。
3)若取出的字元是「(」則直接送入s1棧棧頂。
4)若取出的字元是「)」則將距離s1棧棧頂最近的「(」之間的運算子,逐個出棧,依次送入s2棧,此時拋棄「(」
5)重複上面的1~4步,直至處理完所有的輸入字元。
6)若取出的字元是「#」,則將s1棧內所有運算子(咐答不包括「#」),逐個出棧,依次送入s2棧。
完成以上步驟,s2棧便為逆波蘭式輸出結果。不過s2應做一下逆序處理。便可以按照逆波蘭式的計算方法計算了!
2樓:網友
1. 這是 表示式,要構成二叉樹;
2. 二培迅睜叉樹後序配歲遍歷成 逆波蘭;
你要解決哪 乙個環節昌公升?
請教一下資料結構 二叉樹的先序遍歷 中序遍歷 後序遍歷 是怎麼弄的
3樓:孤松獨海
無論是先中後序遍歷,對於子節點都是先左節點後右節點的,後序遍歷是先遍歷子節點,則開始找a的左邊,再找b的左邊 d 右邊e 接著b 這樣a的左邊遍歷完 再遍歷右邊先遍歷c的子節點f 再c 最後根節點a 則就是debfca
4樓:網友
以下是關於二叉樹操作的11個簡單演算法 */ /***/ struct btreenode{ 中序遍歷 */ inorder(bt); printf(
5樓:網友
後序遍歷是:左、右、根。
即,先遍歷左結點,再遍歷右結點,再遍歷根結點根據你的圖。
先遍歷a的左結點,由於a的左結點b還有左結點,所以就先遍歷到d了,然後就是b的右結點。
演算法可以如下設計:
void postorder(btnode *r)}
C語言程式設計輸入二叉樹的中序遍歷和後序遍歷。我怎麼利用它
中序遍歷來 左子 樹,根,右子樹 後序遍源歷 左子樹,右子樹,根 後序遍歷的最後一個節點是根。中序遍歷中以該根為界,先於該根的節點為左子樹中節點,後於該跟的節點為右子樹節點,將剩下的節點分成兩個子樹,遞迴進行操作。求一個用c語言寫的建立二叉樹。並且先序中序後序遍歷這個二叉樹 include incl...
資料結構二叉樹,已知中序遍歷後序遍歷,如何求先序遍歷
preorder遍歷 訪問根節點的操作發生在遍歷左和右子樹之前。中間順序遍歷 訪問根節點的操作發生在左邊和右邊的子樹中。順序遍歷 訪問根節點的操作發生在遍歷左邊和右邊的子樹之後。解決方案 首先,看到後序遍歷dbcefgha,a是總根節點。然後發現中間順序遍歷a在edcbahfg中的位置,然後在a的左...
C二叉樹遍歷函式中的Visit是什麼
可以是輸出結點,也可以是計算結點 當你先序遍歷時,他就可以是輸出結點 visit函式就是你對查詢到的節點的具體操作,比如輸出啊之類的,根據自己的實際情況書寫 c 實現二叉樹中的visit函式是如何定義的?應該沒錯,就是想輸出結點資料唄,直接cout。visit函式是對資料元素操作的具體函式。比如您要...