2013-05-05 78 views
0

我搜索了互聯網和「你管」,但我沒有找到任何好的教程。 如何在「後綴」中繪製給定表達式的相應「二叉樹」?構建預訂,後序和有序表達式的二叉樹

這個表達式怎麼看中綴和前綴?

我不知道我應該怎麼一步:(

18 5 + 1/4 * 3 5 18 6 /做到這一步 - + -

注:

規則用於繪製預購,後序和有序: 1.預序遍歷:根,左,右 2.後序遍歷:左,右,根 3.有序遍歷:左根,右

請給我n將其用於考試

+0

請說明你需要什麼。繪製二叉樹意味着*構建一棵二叉樹或實際繪製某些東西? – 2013-05-05 06:14:24

+0

我想將這個表達式顯示爲二叉樹。 (作爲父節點的父節點和作爲子節點的左/右節點的樹)。其實我給樹的節點(在這個問題中有15個節點) – Omid7 2013-05-05 06:27:52

+0

是的,我們知道二叉樹是什麼。我不知道你的要求是什麼。遞歸地打印樹是一個基本的練習,因爲你看起來是一個CS學生,你應該知道它。下面詳細介紹從postfix構建樹。 – 2013-05-05 06:39:40

回答

1

從左到右掃描表達式。當你找到一個數字時,建立一個(葉)節點,然後將它推入堆棧。找到運算符時,建立一個節點,從堆棧中彈出兩個節點,將它們作爲當前節點的左右子連接,然後推入堆棧上的節點並繼續。在字符串的末尾,您必須只有根堆棧

當您擁有該樹時,查找前綴和中綴是微不足道的。

請注意,這是基於每個運算符都有兩個值(可以很容易地適用於一元運算符)的假設,即每個內部節點有兩個孩子。一般來說,它是不可能從後綴(見維基百科)構建一棵樹。

+0

謝謝你的最後筆記。但是這個解釋對我來說很模糊。你可以請他們一步一步地向他們展示繪圖樹嗎?或者你知道你的管道或任何其他網站的鏈接顯示一步一步的水平。我是這個主題的新人。我不知道我們應該在哪裏將節點放在每個級別的右側或左側。在此先感謝 – Omid7 2013-05-05 07:06:57

+0

有一個偉大的維基百科文章,你應該檢查過... http://en.wikipedia.org/wiki/Binary_expression_tree – 2013-05-05 07:49:25

+0

謝謝你。在wiki的文章中(http://en.wikipedia.org/wiki/Binary_expression_tree#Prefix_Traversal)顯示了繪製後期修復的步驟。應該如何繪製預先修復。假設我們有(+ * - M N P/R S)。有什麼不同?我的意思是我們應該從表​​達權開始嗎? – Omid7 2013-05-05 08:54:54