java - 我的代码 "++count"和 "count++"解决方案中的 "Kth Smallest Element in a BST"有什么区别?

标签 java algorithm

在算法题“Find the Kth Smallest Element in a BST”中 ( https://leetcode.com/problems/kth-smallest-element-in-a-bst ),我的解决方案如下:

 public class Solution {
        private int count;
        public int kthSmallest(TreeNode root, int k) {
        if (root == null)
            return 0;
        int kth = kthSmallest(root.left, k);
        if (count == k)
            return kth;

        /********** section A *************/
        else if (++count == k)
            return root.val;
        /********** section A end *********/

        /********** section B *************/
        /*
        else if (count == k - 1) 
            return root.val;
        count++;
        */
        /********** section B end *********/

        /********** section C *************/
        /*
        else if (count == k - 1) {
            count++;
            return root.val;
        }
        */
        /********** section C end *********/
        return kthSmallest(root.right, k);
    }
}

在leetcode在线判断中,A部分正确,B部分错误,我认为这两个部分是相等的,我无法弄清楚这两个部分之间的区别。

附言添加了 C 部分。

  • A部分

    不管 ++count == k 是真还是假,计数都会增加。

  • B部分

    count只有在count == k - 1为false时才会增加,因为当count == k - 1为true时,函数会返回,不再执行任何更多。但是既然我们已经得到了正确的返回值,是否有必要增加count的值呢?

  • 在C部分

    计数仅在 count == k - 1

  • 时更新
  • 结论 Section B 不等于 A,Section C 也不等于,当我将 Section B 与 Section C 整合时,如下所示:

        else if (count == k - 1) {
            count++;
            return root.val;
        }
        count++;
    

等于section A,通过了在线判断,没有Asection优雅。

:)

最佳答案

无论比较成功与否,私有(private)实例变量count 的值都会在A 节中更新。

也就是说,在本节开头的比较点:

在 A 部分中,如果 count == k - 1 成立,则私有(private) count 变量在 root.val 之前递增 1被退回。

在B节中,如果count == k - 1成立,则count变量不被修改,root.val是返回。

关于java - 我的代码 "++count"和 "count++"解决方案中的 "Kth Smallest Element in a BST"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31655285/

相关文章:

java - Dozer org.apache.commons.lang.ClassUtils.getClass(Ljava/lang/String;) 错误

python - 旋转时检测碰撞

algorithm - 如何求解递归方程T(n)=T(n/2)+T(n/4)+\Theta(n)?

java - 如何在全屏独占模式下摆脱鼠标光标?

java - 无法使用 ajax 调用 servlet

java - 如何使 JavaFX Slider 以离散的步骤移动?

java - 从嵌套结构中删除谓词(google guava 谓词)

java - 基于 Parens 将字符串拆分为更小的部分

c# - 如何连接叶子并返回 BST 周围节点的列表

通过折叠段简化 2D 多边形的算法?