卡特兰数

来源:互联网 发布:nginx jetty 区别 编辑:程序博客网 时间:2024/06/10 09:22

最近在努力学习关于树的算法,其中一个题目是:

给定三个不相同的数,其前序为1、2、3,其在二叉树中的中序遍历的顺序的种类有多少中?


不就是中序遍历么,我相信明白中序遍历含义的同学一定不成问题。而我们也可以把这个问题看成是一个结点的进栈和出栈的过程问题。其二叉树的形态决定了其进栈出栈的顺序,也就确定了其中序序列。把这个问题推广开来,由前序为1、2、3、4...n 所能得到的中序序列数目恰巧为1、2、3...n按不同顺序进栈出栈所能得到的排列的数目,这个数目为:

C_n = {2n \choose n} - {2n \choose n + 1} = \frac{1}{n+1}{2n \choose n}

这个数列即为为卡特兰数。

这个数列在许多地方都非常有用,比如进行括号的匹配种类的计算等,如果有兴趣的话可以google下这个东东~。