在研究加泰罗尼亚数字时,我遇到的一些应用程序是:
虽然我理解前两个问题,加泰罗尼亚数字如何适应他们的解决方案,但我无法理解它们如何适应第三个问题。
在互联网上找不到任何其他有用的资源来解释如何部分。每个人都说这就是解决方案。
有人可以解释一下吗?
由于其他人似乎不同意我的观点,认为这个问题是题外话,我现在决定它是主题并提供和回答。
维基百科确实对“排列 n 对括号的方法数”(此链接中的第二个要点)感到困惑。部分困惑在于括号字符串的顺序与二叉树的顺序不匹配,你确实理解,或者还有许多其他例子。
这是一种将正确匹配的括号对字符串转换n为具有内部节点的二叉树的方法n。考虑最左边的括号,它将成为左括号及其匹配的右括号。将字符串转换为二叉树的节点。当前考虑的括号内的子字符串成为该节点的左子节点,当前考虑的右括号之后(右侧)的子字符串成为右子节点。一个或两个子字符串可能为空,并且当前考虑的括号被简单地删除。如果任一子字符串不为空,则递归地继续此过程,直到删除所有括号。
这里有两个例子。让我们从字符串开始((()))。我们从
考虑的括号是最外面的括号。这变成了
(我没有费心绘制外部叶节点)然后
然后
这是维基百科最左边的二叉树,有 3 个内部节点。
现在让我们做另一个字符串,(())()。我们从
同样,所考虑的括号是最外面的括号。这转变为
现在考虑的括号是前两个,而不是最外面的。这变成了
最终变成
这是维基百科列表中的第二个二叉树。
我希望你现在明白了。这是正确配对的 3 对括号的所有五个可能字符串的列表,后面是维基百科的二叉树列表。这些列表现在相互对应。
((())) (()()) (())() ()(()) ()()()
Run Code Online (Sandbox Code Playgroud)