腾讯五十题No.40二叉树搜索中第k小的元素

题目链接
二叉树特点左子树小于根节点根节点小于右子树

class Solution {
    public int kthSmallest(TreeNode root, int k) {
        //左子树节点个数
        int leftN = findChild(root.left);
        //如果k等于左子树节点加一,则第k个数为根节点
        if(leftN + 1 == k) return root.val;
        //如果小于左子树节点个数,就递归左子树
        else if(k <= leftN){
            return kthSmallest(root.left,k);
        }else{
            //大于左子树节点数+1,就递归右子树
            return kthSmallest(root.right,k-leftN-1);
        }
    }
    //获取左子树节点个数
    public int findChild(TreeNode root){
        if(root == null) return 0;
        return findChild(root.left)+findChild(root.right)+1;
    }
}

posted @ 2022-02-09 14:43  蹇爱黄  阅读(25)  评论(0)    收藏  举报