【发布时间】:2021-01-03 12:16:05
【问题描述】:
假设您有以下 BST:
4
/ \
2 8
使用以下 C 结构实现:
typedef struct node{
int data;
struct node* left;
struct node* right;
}node;
输出将是:
(4,2)
(4,8)
(2,4)
(2,8)
(8,4)
(8,2)
这个算法如何实现?
是否有可能以比 O(n^2 - n) 更好的方式在运行时提供正确输出的算法实现? p>
【问题讨论】:
-
我不这么认为。因为无论如何输出对的数量都是 n^2 - n。
-
你走树。在每个节点上,您执行第二次独立遍历。在每个嵌套遍历的每个节点,输出第一次遍历的当前节点和嵌套遍历的当前节点形成的pair,除非它们是同一个节点。您可以使用深度优先或广度优先遍历;无论哪种方式,您都会得到所有配对,但(通常)顺序不同。
标签: c algorithm binary-search-tree combinations permutation