二叉搜索树中第K小的元素

给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

思路

中序遍历该二叉搜索树,放到list,list里面是从小到大,索引从0开始,返回k-1上的数

class Solution {
    public int kthSmallest(TreeNode root, int k) {
        
        List<Integer> list=new ArrayList<Integer>();
        inorder(list,root);
        
        return list.get(k-1);
    }
    
    void inorder(List<Integer> list,TreeNode root){
        
        if(root==null){
            return ;
        }
        
        inorder(list,root.left);
        list.add(root.val);
        inorder(list,root.right);
        
    }
}

更优写法

class Solution {
    
    private int c;
    private TreeNode temp;
    public int kthSmallest(TreeNode root, int k) {
        c=0;
        
        inorder(k,root);
        
        return temp.val;
    }
    
    void inorder(int k,TreeNode root){
        
        if(root==null){
            return ;
        }
        
        inorder(k,root.left);
        c++;
        if(k==c){
            temp=root;
        }
        inorder(k,root.right);
        
    }
}


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 我的手指很甜,这不是回到我落魄的童年,也不是老年痴呆病人因为黄昏恋,而感觉到的生命的最后的温暖。这只是 清晰的一瞬...
    李一十八阅读 340评论 0 0

友情链接更多精彩内容