为什么n个节点的二叉树是卡特兰数

刚刚接触卡特兰数的时候,对这个结论很蒙,因为左右括号、火车进站很好理解,结果是个2*n的序列,与卡特兰数的证明可以直接对应。但是对于二叉树,我却很难想到怎么构造成2*n个数的数列。

可以把二叉树转换成完全二叉树进行理解。

对于n个节点的二叉树,我们把这n个都当作父亲节点,一定可以补充(n+1)个叶子节点,使之成为一棵(2n+1)个节点的完全二叉树。我们把原来的二叉树称作父亲树,即全是父亲节点的树。

一棵父亲树一定与一棵完全二叉树一一对应。

(图片来自https://blog.csdn.net/Dashi_Lu/article/details/90109542) 

证明:

对于一棵完全二叉树,分为叶子节点和父亲节点。

首先,一棵父亲树到完全树加叶子节点只有一种方式,不会出现一颗父亲树对应多种完全树,所以这是一个映射。

任意一棵完全二叉树,删除所有叶子节点都是一颗父亲树。所以父亲树到完全二叉树是满射。

对于两个不同的父亲树,添加叶子后的完全二叉树一定不同。所以父亲树到完全二叉树是单射。

所以父亲树到完全二叉树是双射。完全二叉树的数量与父亲树的数量是相同的。

那么考虑(2n+1)个节点的完全二叉树的数量。

根节点是一定的,思考剩下的2n个节点。这2n个节点一定是n个左儿子(儿子节点,不要看成叶子节点),n个右儿子。

做不包括树根的先序遍历。节点是左儿子为0,右儿子为1。那么结果就是一个2*n个数的数列,其中n个0,n个1。由于是先序遍历,前缀0一定比前缀1多,即为卡特兰数。完全二叉树与先序遍历一一对应。所以完全树的数量为Cat_n

综上所述,n个节点的二叉树,(2*n+1)个节点的完全树,数量均为Cat_n

猜你喜欢

转载自blog.csdn.net/Luowaterbi/article/details/104196426