構造一棵表示式樹

2021-06-22 07:44:53 字數 1174 閱讀 1180

演算法分析:

該演算法將字尾表示式轉變成表示式樹。由於我們已經有了將中綴表示式

轉變成字尾表示式的演算法,因此可以從這兩種輸入表示式生成表示式樹。所

描述的方法類似於字尾表示式求值的演算法。我們一次乙個符號的讀入表示式

。如果符號是運算元,那麼就建立乙個單結點樹並將它推入棧中。如果符號

是操作符,他的左、右兒子分別是t1和t2。然後將指向這棵樹的指標壓入棧

中。例如輸入123*+,將會得到相應的表示式+1*23、1+2*3、12*3+。

個人小結及心得:

在本程式的編寫過程中,遇到的最大問題當然表示式樹的

建立。對於treenode這個結構體,以及new的使用給我帶來了許

多大的麻煩。treenode p1,treenode* p1,treenode* &p1有時讓

我覺得手足無措,好在經過好多次的debug之後,程式才勉強可

以執行,同時對上述三個型別有了更好的理解。

另外,本程式的侷限在於在表示式的讀入過程中,讀入的

表示式必須為字尾表示式,以及相應的字元必須為數字,如果

不能滿足這兩個條件則程式不能執行。其次,本程式利用遞迴

的思想遍歷該樹,也對程式的執行速度不能保證。另外,由於

本人水平有限,在遍歷樹的過程中不會生成樹的樣子,暫且就

先這樣,不過在之後的學習中,我相信其一定難不倒我。

**實現:

#include #include#includeusing namespace std;

struct treenode

};void construct_tree(const string& str,stack&st)

else

}}void preorder(treenode* &t)//先序遍歷

else

cout<<"";

}void inorder(treenode* &t)//中序遍歷

else

cout<<"";

} void postorder(treenode* &t)//後序遍歷

else

cout<<"";

}int main()

{ stacktree_stack;

cout<<"please input the postfix equation(比如123*+,不可讀入字母)"<

一棵受傷的樹

有乙個農場主為了方便拴牛,在莊園的一棵榆樹上箍了乙個鐵圈。隨著榆樹的長大,鐵圈慢慢嵌進了樹身,榆樹的表皮留下一道深深的傷痕。有一年,當地發生了一種奇怪的植物真菌疫病,方圓幾十公里的榆樹全部死亡,唯獨那顆箍了鐵圈的榆樹卻存活下來。為什麼這棵榆樹能倖存呢?植物學家對此產生了興趣,於是組織人員進行研究。結...

一棵樹是否為另一棵樹的子結構

輸入兩顆二叉樹a,b,判斷b是不是a的子結構。問題描述 給定兩個二叉樹的根節點,判斷第二樹是否是第乙個樹的子樹,如果是返回1,否則返回0.拿第二個樹的每個節點去和第乙個樹做匹配,如果某個節點匹配成功,就接著往下匹配,否則重新從第二個樹的的根節點開始。注意區別 測試用例 樹1 42 6 1 3 5 7...

一棵樹 拓展活動

昨天我們部門去一棵樹休閒農莊進行了一次拓展活動,五十來人都穿著迷彩服,呵,活像一群逃兵,逃脫生活工作的壓力的逃兵 相較於以前的活動,這次活動對我來說收穫還是挺大的。我們一共54人,從頭到尾報一次數要多久的時間呢,大家有的說要50秒,有的說60秒,30秒,最後大多數同意50秒,最後表決的時候都不怎麼敢...