diff --git a/thu_dsa/chp4/notice.md b/thu_dsa/chp4/notice.md index b8e570b..32424c3 100644 --- a/thu_dsa/chp4/notice.md +++ b/thu_dsa/chp4/notice.md @@ -40,6 +40,16 @@ bottom top 对这个结论可以利用数学归纳法证明,主要就是对单目运算符和双目运算符进行讨论,这里不再赘述。 +> 表达式树 + +可以将中缀表达式和后缀表达式转化为表达式树。 + +对于中缀表达式,需要一个操作数栈和操作符栈。按照同样的方法遍历中缀表达式,操作数封装成单个的树节点入操作数栈,操作符按照优先级关系入栈出栈。对于出栈的双目运算符,弹出操作数栈中的两棵表达式树,以该运算符为根节点,两棵表达式树分别作为其左右子树,再将新得到的表达式入栈,如此不断进行下去即可。 + +对于后缀表达式,并不需要操作符栈,依序读到操作符,然后按照和中缀表达式同样的操作,即出栈两棵树,构造新树,然后再入栈,即可。 + +表达式树的中序遍历即为中缀表达式,后序遍历为后缀表达式。 + ## 卡特兰数 括号匹配问题,栈混洗问题以及异构二叉树的数量问题,都可以归入到卡特兰数的范畴,这里做一个简单的说明。