一、表達式與二叉樹的關係
前綴表達式對應於二叉樹的前序遍歷;
中綴表達式對應於二叉樹的中序遍歷;
後綴表達式對應於二叉樹的後序遍歷;
二、根據中綴表達式生成二叉樹
中綴表達式:a + b * (c - d) - e / f
中序遍歷爲:左兒子、根節點、右兒子
按照操作符的優先級,其二叉樹生成過程爲:
1. c-d的優先級高,根是-操作符,c和d分別爲左右兒子
-
| |
c d
2.接下來是乘法,根是*操作符,b和1中的內容分別是左右兒子
*
| |
b -
| |
c d
3.接下來是觸發,根是/操作符,e和f分別是左右兒子
/
| |
e f
4.接下來是加法,根是+操作符,a和2中的內容分別是左右兒子
+
| |
a *
| |
b -
| |
c d
還包括3中的那棵樹。
5. 接下來是減法,根是-操作符,4中的兩棵樹分別是左右兒子
-
| |
+ /
| | | |
a * e f
| |
b -
| |
c d
三、根據二叉樹前序遍歷得到前綴表達式
前序遍歷爲:根節點、左兒子、右兒子
得到前綴表達式爲:- + a * b - cd / ef
四、根據二叉樹後序遍歷得到後綴表達式
後序遍歷爲:左兒子、右兒子、根節點
得到後綴表達式爲:abcd - * + ef / -
五、小結
若可以根據前綴、中綴、或後綴表達式確定一顆二叉樹,則可以生成相應的前綴、中綴、後綴表達式。
前序遍歷、中序遍歷、後續遍歷的結義方法:
1. 前序就是根節點在前邊,中序就是根節點在中間,後續就是根節點在後邊
2. 總是先左兒子,再右兒子。
前序:根節點、左兒子、右兒子
中序:左兒子、根節點、右兒子
後續:左兒子、右兒子、根節點