我在一周前的一次测试中遇到了以下问题。我还没有拿回我的成绩,但我确信我的解决方案没有完全针对问题的所有基本情况。
声明如下:
对于二叉搜索树,编写一个算法(使用伪代码)计算具有大于或等于给定整数 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)编写相同的算法?