二叉树问题---统计所有可能的二叉树结构的种数

【题目】

  给定一个整数N,如果N<1,代表空树结构,否则代表中序遍历的结果为{1,2,3,…,N}。请返回可能的二叉树结构有多少。

【基本思路】

  假设num[n]代表n个节点的搜索二叉树有多少种可能。假设序列{1 , …, i , … , N},如果以i作为头结点,i的左子树有i-1个节点,所以可能的结构有num[i-1]种,右子树有N-i个节点,所以有num[N-i]种可能,故以i作为头结点的可能的结构的种数为num[i-1]*num[N-i]。
  把从1到N分别作为头节点,所有可能的结构加起来就是答案,利用动态规划加速运算。

下面是使用python3.5实现的代码

#统计所有可能的二叉树结构的种数
def allNum(n):
    if n < 2:
        return 1
    num = [0 for i in range(n+1)]
    num[0] = 1
    for i in range(1, n+1):
        for j in range(1, i+1):
            num[i] += num[j-1] * num[i-j]
    return num[n]
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值