问题:为什么给定节点个数的二叉树个数为卡特兰数
按照惯例,先解释一波什么是卡特兰数。
令h(0)=1,h(1)=1,卡特兰数满足递推式:
h(n)= h(0)h(n-1)+h(1)h(n-2) + ... + h(n-1)h(0) (n>=2)*
例如:
h(2)=h(0)h(1)+h(1)h(0)=11+11=2
h(3)=h(0)h(2)+h(1)h(1)+h(2)h(0)=12+11+21=5
另类递推式:
h(n)=h(n-1)(4n-2)/(n+1);
递推关系的解为:
h(n)=C(2n,n)/(n+1) (n=0,1,2,...)
递推关系的另类解为:
h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,...)
关于一颗二叉树,我们再数据结构中就学习过,通过二叉树的前序和中序遍历,能够确定唯一的一颗二叉树。而入栈序列其实就是二叉树的前序遍历序列,出栈序列就是二叉树的中序遍历序列,在入栈序列确定的情况下,对应的出栈序列有多少种呢?
emmmm,没错,就是卡特兰数,那么在已知前序中序的情况下,我们就能够确认唯一的一颗二叉树,所以,出栈序列的种数即为二叉树的数目了。