【发布时间】:2021-06-26 09:58:01
【问题描述】:
我正在解决this 问题,如果一个输入可以有多个答案,我会感到困惑。
【问题讨论】:
-
请在问题中包含问题的全文,而不是引用外部链接。
标签: data-structures tree binary-search-tree
我正在解决this 问题,如果一个输入可以有多个答案,我会感到困惑。
【问题讨论】:
标签: data-structures tree binary-search-tree
是的;如果不是所有的叶子都具有相同的深度,您基本上可以决定在哪里留下节点(受一些限制)。如果对于整数n(^ 在这种情况下是指数),树的节点数不能表示为2^n-1,就是这种情况。假设我们有元素 1 到 6:
可能的树
4
/ \
2 5
/ \ \
1 3 6
4
/ \
2 6
/ \ /
1 3 5
3
/ \
2 5
/ / \
1 4 6
3
/ \
1 5
\ / \
2 4 6
【讨论】:
如果数组中的元素个数正好是“2的幂减1”,比如1、3、7、15、31等,那么证明只能有一个平衡二进制就比较容易了具有相同中序遍历的搜索树。实际上,左右子树需要具有相同数量的元素;因此根必须是中间元素;并且通过归纳,右子树和左子树只有一种可能性。
例如,这是唯一使用元素 [1,2,3,4,5,6,7] 的完整二叉搜索树:
4
/ \
2 6
/ \ / \
1 3 5 7
如果数组中的元素数量不完全是“2 的幂减一”,那么这棵树就不是完美的;特别是,叶子将有两个可能的深度。这为我们提供了一些可用于产生多种解决方案的松弛度。
例如,这些是使用元素 [1,2,3,4,5,6] 的四棵树:
3 3 4 4
/ \ / \ / \ / \
1 5 2 5 2 5 2 6
\ / \ / / \ / \ \ / \ /
2 4 6 1 4 6 1 3 6 1 3 5
【讨论】: