先序序列为a、b、c、d的不同二叉树的个数是多少(卡特兰数)

除了逻辑清晰的挨个画出来之外,还有一种方法需要大家牢记!

因为前序序列和中序序列可以唯一地确定一棵二叉树,并且题目已经给出了先序序列,所以我们只需要知道由该先序序列可以确定多少个中序序列即可,确定多少个中序序列就是可以确定多少棵二叉树!

那么,问题来了,由一个先序序列如何确定有多少个中序序列呢?这就有两个“公式”需要大家去牢记了!

1、先序序列和中序序列的关系为:以先序序列入栈,则出栈序列必为中序序列。

 2、一个入栈顺序可以确定的出栈顺序为 C(2n,n) / (n+1)(卡特兰数)。

 所以答案就清楚了,如果以abcd的顺序入栈,将有14种出栈顺序,也就是可以确定14个中序序列,即可以确定14个不同的二叉树

  • 53
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
可以通过以下步骤构建对应的二叉树: 1. 先序序列的第一个元素 A 是根节点。 2. 在中序序列中找到根节点 A,以它为界限将中序序列分成两部分:左子树序列 DB 和右子树序列 C。 3. 在先序序列中,根节点 A 后面的元素 B 是左子树的根节点。 4. 在左子树序列 DB 中,找到左子树根节点 B,在中序序列中以它为界限,将左子树序列分成两部分:左子树的左子树为空,右子树序列 AC。 5. 在先序序列中,根节点 B 后面的元素 D 是左子树的左子树的根节点。 6. 在中序序列中,左子树的左子树为空,右子树序列 AC 中,以 D 为界限将右子树序列分成两部分:左子树序列为空,右子树序列 C。 7. 在先序序列中,节点 D 没有后面的元素,说明它没有左子树和右子树。 8. 在中序序列中,右子树序列 C 的第一个元素是左子树的右子树 E,以它为界限将右子树序列分成两部分:左子树序列为空,右子树序列 C。 9. 在先序序列中,根节点 B 和节点 D 后面的元素都在右子树序列 C 中,找到右子树的根节点 C。 10. 在中序序列中,右子树序列 C 的第一个元素是左子树的右子树 E,以它为界限将右子树序列分成两部分:左子树的左子树为空,右子树的左子树 F。 11. 在先序序列中,右子树序列 C 的第一个元素是根节点 C,它的后面一个元素是左子树的根节点 E。 12. 在中序序列中,左子树的右子树 E 后面是右子树的左子树 F,以 E 为界限将左子树序列分成两部分:左子树序列为空,右子树序列 F。 13. 在先序序列中,节点 E 没有后面的元素,说明它没有左子树和右子树。 14. 在中序序列中,右子树的左子树 F 后面没有元素,说明它没有左子树和右子树。 15. 构建完成的二叉树如下所示: ``` A / \ B C \ D \ E \ F ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员班长

感谢您的一路相伴

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

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

打赏作者

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

抵扣说明:

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

余额充值