在算法题“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/