【发布时间】:2018-02-13 19:14:25
【问题描述】:
我在一周前的一次测试中遇到了以下问题。我的成绩还没有恢复,但我确信我的解决方案没有完全针对问题的所有基本情况。
声明如下:
对于二叉搜索树,编写一个算法(使用伪代码)计算具有大于或等于给定整数 k 的键的节点数。您的算法应该在最坏情况时间 O(h) 内运行,其中 h 是二叉搜索树的高度。
假设给定一个方法 subtreeSize(treeNode n),该方法在 O(1) 时间内运行,并返回以 n 为根的子树中的节点数,包括 n 本身。
这是我的解决方案:
nbNodesGreaterEqual(treeNode n, int k){
if(n == null) return 0;
if(n.getValue() >= k) return 1 + substreeSize(n.getRightChild()) + nbNodesGreaterEqual(n.getLeftChild(), k);
if(n.getValue < k) return nbNodesGreaterEqual(n.getRightChild,k);
}
我的算法完成了吗?另外,有没有办法为不遍历所有节点的常规二叉树(不是 BST)编写相同的算法?
【问题讨论】:
-
subtreeSize()仅当您在树中存储和更新高度信息时才会采用O(h)。否则它将是一个O(n)操作,其中n 是树中的节点数(即n = O(2^h))。 -
哦!我忘了提到声明说我们应该假设 subtreeSize() 在 O(1) 中运行
标签: tree binary-tree binary-search-tree pseudocode