给定一个排序数组写一个程序来找到一个深度最小的二叉搜索树,那个深度是多少?
我知道如何将数组转换为平衡的BST,但是如何使该函数创建具有最小深度的BST?
答案 0 :(得分:0)
1)构建一个高度为h
的完整二叉树(h
是2^h - 1
> =数组中元素数的最小数量)。此时您可以忽略输入数组。显然,这棵树的深度最小(任何深度较小的树根本就没有足够的节点来存储所有的数组元素)。
2)现在,您可以使用简单的递归方法使用数组元素填充此树:
i)填充左子树
ii)将最小的未使用数字放入当前节点
iii)填写正确的子树
不要忘记在开始遍历之前删除2^h - 1 - n
个叶子(其中n
是输入数组大小)(这一步是必要的,因为完整树的大小是2^h - 1
但是有数组中只有n
个元素。)
此算法的O(n)
实现非常紧张(您可以显式构建树,删除额外的叶子,然后遍历它,因为树中的节点数为O(n)
)。 / p>