Java 二叉搜索树中的第k个最小元素

Java 二叉搜索树中的第k个最小元素,java,algorithm,recursion,Java,Algorithm,Recursion,我正在从leetcode解决这个问题,并为此自己编写了一些代码。我遵循了这里提到的想法: 看起来它没有返回正确的结果,我需要一些关于这个逻辑有什么问题的反馈。有人能在这里提供一些见解吗?如果可能的话,试着用我正在使用的方法解释你的答案,这样就更容易理解我的错误所在。谢谢 这是我的密码: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left

我正在从leetcode解决这个问题,并为此自己编写了一些代码。我遵循了这里提到的想法:


看起来它没有返回正确的结果,我需要一些关于这个逻辑有什么问题的反馈。有人能在这里提供一些见解吗?如果可能的话,试着用我正在使用的方法解释你的答案,这样就更容易理解我的错误所在。谢谢

这是我的密码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public int kthSmallest(TreeNode root, int k) {
        //what happens if root == null
        //what happens if k > total size of tree
        return kthSmallestNode(root,k).val;

    }

    public static TreeNode kthSmallestNode(TreeNode root,int k){
        if(root==null) return root;
        int numberOfNodes = countNodes(root.left);

        if(k == numberOfNodes ) return root;
        if(k<numberOfNodes ) return kthSmallestNode(root.left,k);
        else return kthSmallestNode(root.right,k-numberOfNodes );
    } 

    private static int countNodes(TreeNode node){
        if(node == null) return 0;
        else return 1+countNodes(node.left)+countNodes(node.right);
    }
}

“它没有返回正确的结果”——它返回什么?查看a比只查看代码要好得多。也就是说,您的
maxDepth()
方法返回的是元素计数,而不是深度。对不起,是的,我忘记重命名函数了。我会改变的你确定你的树是整齐的吗?您在这里发布的代码看起来是正确的,因此您可能希望调试并验证树的结构。
TreeNode - [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
k = 3

My Answer - 8
Expected Answer - 17 (This is as per leetcode)