在研究卡特兰数时,我发现其中的一些应用:
- 使用n个节点进行二叉搜索树的可能数量。
- 在圆上使用2n个点绘制不相交弦的方法数量。
- 安排n对括号的方式数量。
虽然我理解前两个问题,卡特兰数如何适用于它们的解决方案,但我无法理解它们如何适用于第三个问题。
在互联网上找不到任何其他有用的资源来解释“HOW”的部分。每个人都只说这是解决方案。
可以有人解释一下吗?
在研究卡特兰数时,我发现其中的一些应用:
虽然我理解前两个问题,卡特兰数如何适用于它们的解决方案,但我无法理解它们如何适用于第三个问题。
在互联网上找不到任何其他有用的资源来解释“HOW”的部分。每个人都只说这是解决方案。
可以有人解释一下吗?
由于其他人似乎不同意我认为这个问题是离题的,所以我现在决定它是有关的,并提供一个答案。
维基百科确实让人困惑关于“排列n对括号的方式数量”(this link中的第二个要点)。部分混淆是括号字符串的顺序与二叉树的顺序不匹配,你理解了这一点,或者与许多其他例子不同。
这里有一种方法可以将一个由正确匹配的括号对组成的长度为n的字符串,转换为一个具有n个内部节点的二叉树。考虑最左边的括号,它将是一个左括号,与其匹配的右括号一起。将该字符串转换为二叉树的一个节点。当前考虑的括号内的子串成为该节点的左子节点,当前考虑的右括号之后(向右)的子串成为右子节点。任何一个或两个子串都可能为空,并且当前考虑的括号会被简单地删除。如果任何一个子串不为空,则继续递归执行此过程,直到所有括号都被删除。(我没有费力绘制外部叶节点)然后
那么
这是维基百科最左侧的具有3个内部节点的二叉树。
现在让我们来看另一个字符串,(())()
。我们从以下内容开始:
再次强调,被考虑的括号是最外层的括号。这将被转换为
现在被考虑的括号是前两个,而不是最外层的那个。这就变成了最终成为
这是维基百科列表中的第二个二叉树。
我希望现在你明白了。以下是所有正确匹配的3对括号可能的五个字符串列表,后面是维基百科的二叉树列表。这些列表现在相互对应。
((())) (()()) (())() ()(()) ()()()