【发布时间】:2019-06-29 21:47:08
【问题描述】:
我遇到了以下问题:
给定一个正整数 n,生成所有节点为 1、2、...、n 的二叉搜索树。
例如,给定 3,得到:
我正在做以下事情:
Generate all the permutations of the sequence (1, 2, ..., n).
For each permutation p:
Create a tree t.
For each number n in p:
Insert n into t.
If t has not yet been generated, keep it. <-- Expensive Operation
但是,这种方法很慢,因为会生成重复的树(对于 n = 3,(2, 1, 3) 和 (2, 3, 1) 生成相同的树),我需要确保它们不会被保留.有人会指出我更快的方法吗?
【问题讨论】:
-
你可以在stackoverflow.com/questions/16004723/…987654321@这个问题的答案中找到有效的算法
-
@ile 我认为 OP 想把它们都打印出来而不是计算它们
-
那里描述了一个简单的映射,可以高效地枚举它们。
-
@ile 刚看到很抱歉没看到那部分。
标签: algorithm