刚刚接触卡特兰数的时候,对这个结论很蒙,因为左右括号、火车进站很好理解,结果是个2*n的序列,与卡特兰数的证明可以直接对应。但是对于二叉树,我却很难想到怎么构造成2*n个数的数列。
可以把二叉树转换成完全二叉树进行理解。
对于n个节点的二叉树,我们把这n个都当作父亲节点,一定可以补充(n+1)个叶子节点,使之成为一棵(2n+1)个节点的完全二叉树。我们把原来的二叉树称作父亲树,即全是父亲节点的树。
一棵父亲树一定与一棵完全二叉树一一对应。
(图片来自https://blog.csdn.net/Dashi_Lu/article/details/90109542)
证明:
对于一棵完全二叉树,分为叶子节点和父亲节点。
首先,一棵父亲树到完全树加叶子节点只有一种方式,不会出现一颗父亲树对应多种完全树,所以这是一个映射。
任意一棵完全二叉树,删除所有叶子节点都是一颗父亲树。所以父亲树到完全二叉树是满射。
扫描二维码关注公众号,回复:
11277311 查看本文章
对于两个不同的父亲树,添加叶子后的完全二叉树一定不同。所以父亲树到完全二叉树是单射。
所以父亲树到完全二叉树是双射。完全二叉树的数量与父亲树的数量是相同的。
那么考虑(2n+1)个节点的完全二叉树的数量。
根节点是一定的,思考剩下的2n个节点。这2n个节点一定是n个左儿子(儿子节点,不要看成叶子节点),n个右儿子。
做不包括树根的先序遍历。节点是左儿子为0,右儿子为1。那么结果就是一个2*n个数的数列,其中n个0,n个1。由于是先序遍历,前缀0一定比前缀1多,即为卡特兰数。完全二叉树与先序遍历一一对应。所以完全树的数量为。
综上所述,n个节点的二叉树,(2*n+1)个节点的完全树,数量均为。