二叉搜索树的深度

时间:2014-09-12 13:41:35

标签: arrays data-structures tree

给定一个排序数组写一个程序来找到一个深度最小的二叉搜索树,那个深度是多少?

我知道如何将数组转换为平衡的BST,但是如何使该函数创建具有最小深度的BST?

1 个答案:

答案 0 :(得分:0)

1)构建一个高度为h的完整二叉树(h2^h - 1> =数组中元素数的最小数量)。此时您可以忽略输入数组。显然,这棵树的深度最小(任何深度较小的树根本就没有足够的节点来存储所有的数组元素)。

2)现在,您可以使用简单的递归方法使用数组元素填充此树: i)填充左子树 ii)将最小的未使用数字放入当前节点 iii)填写正确的子树 不要忘记在开始遍历之前删除2^h - 1 - n个叶子(其中n是输入数组大小)(这一步是必要的,因为完整树的大小是2^h - 1但是有数组中只有n个元素。)

此算法的O(n)实现非常紧张(您可以显式构建树,删除额外的叶子,然后遍历它,因为树中的节点数为O(n))。 / p>