我有一个问题,似乎无法解决。 我需要在树的最低层(几乎完整的bst)中找到最右边的叶子,而树的大小是未知的。 >在O(log(n)^ 2)中。
我想的方向是:
算法:
while(当前节点有儿子)
- 计算右子树的高度,将其保存到rightH中。
- 计算左子树的高度,将其保存到leftH。
- 如果(rightH> = leftH) 与正确的儿子递归通话。 其他 与左儿子递归通话。 片刻结束
返回当前节点。
最右边的叶子-树的最低层中最右边的叶子。
我不确定它是否会起作用,我希望您可以帮助我。 应该在O(log(n)^ 2)中运行
答案 0 :(得分:0)
它可以工作,但是不会给您所需的时间复杂性。您的第1步和第2步合在一起在Ω(n)
中运行(毕竟,它们必须访问所有元素)。
为了获得最佳的渐近时间复杂度,您需要依靠左填充的树。