N个节点的二叉树的形态数详细推导

0.总结


Get to the key point firstly, the article comes from LawsonAbs!

  • N个节点的二叉树的形态数的推导
  • 卡特兰数
  • 相关例题的分析

1.问题

由N个节点构成的二叉树的形态数是多少。
例如,当n=1时,如下图所示,二叉树只有一种形态;
在这里插入图片描述

当n=2时,二叉树有2种形态。
在这里插入图片描述
在这里插入图片描述
那么 n 的值更一般的时候,是怎么推导的?
step 1.令 dp[i] 表示节点数为i时,其具有的形态个数;
step 2.根据常识有,dp[0] = 1; dp[1]=1;没有节点或者只有一个节点时,都是1。现在就以n=3为例,推一下n=3时的情形。考虑如何放这三个节点,分步骤来操作:
固定一个根节点,再将剩余的节点放到左右两个子树中。那么 dp[3] 就是这些方法的总和。放根节点的方法只有一个,那么问题就是放剩余的两个节点的方法有多少种?可以像下面这么安排:

  • 左子树放2个,右子树放0个;
    在这里插入图片描述在这里插入图片描述
    公式也就是
    dp[1]*dp[2]*dp[0] = 2【dp[1]表示根节点是1个节点时的形态数目; dp[2]表示的是左子树有两个节点时的形态数目;dp[0]表示的是右子树有0个节点时的形态数目】

  • 左子树放1个,右子树放1个;

在这里插入图片描述
公式:
dp[1]*dp[1]*dp[1] = 1【dp[1]表示根节点是1个节点时的形态数目; dp[1]表示的是左子树有1个节点时的形态数目;dp[1]表示的是右子树有1个节点时的形态数目】

  • 左子树放0个,右子树放2个;
    在这里插入图片描述
    在这里插入图片描述
    公式:
    dp[1]*dp[0]*dp[2] = 2【dp[1]表示根节点是1个节点时的形态数目; dp[0]表示的是左子树有0个节点时的形态数目;dp[2]表示的是右子树有2个节点时的形态数目】
    上述三个公式的和就是dp[3]。因为dp[1]=1,所以可以省去不写。

    以此类推,那么得到的结果就是 dp[n] = dp[0]*dp[n-2] + dp[1]*dp[n-1] +.... + dp[n-1]*dp[1] + dp[n-2]*dp[0]。这个式子也就是著名的卡特兰数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

说文科技

看书人不妨赏个酒钱?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值