力扣 230. 二叉搜索树中第K小的元素

题目

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。

示例

力扣 230. 二叉搜索树中第K小的元素_第1张图片
输入:root = [3,1,4,null,2], k = 1
输出:1

力扣 230. 二叉搜索树中第K小的元素_第2张图片

输入:root = [5,3,6,2,4,null,null,1], k = 3
输出:3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法1:

1、中序遍历,从小到大有序
2、记一个全局变量的rank值和res值,找索引对应的值
3、python中全局变量需要加上 self.

Python 实现
class Solution:
    def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
        self.res=0
        self.rank=0

        def traverse(root,k):
            if root==None: return 
            traverse(root.left,k)
            self.rank+=1

            #对根操作
            if self.rank==k:
                self.res=root.val
                return

            traverse(root.right,k)
        
        traverse(root,k)
        return self.res

力扣 230. 二叉搜索树中第K小的元素_第3张图片

Java实现
class Solution {
    int flag = 0;
    int res = 0;
    public int kthSmallest(TreeNode root, int k) {
        traverse(root, k);
        return res;
    }

    public void traverse(TreeNode root, int k) {
        //base case
        if (root == null) return;

        traverse(root.left, k);

        flag++;
        if (flag == k) {
            res = root.val;
            return;
        }

        traverse(root.right, k);
    }
}

力扣 230. 二叉搜索树中第K小的元素_第4张图片

方法2

Java实现
class Solution {
    // 存储升序遍历
    List<Integer> inOrderArr = new ArrayList<>();

    public int kthSmallest(TreeNode root, int k) {
        getInOrder(root);

        return inOrderArr.get(k - 1);
    }

    // 升序遍历
    public void getInOrder(TreeNode root) {
        if (root == null) {
            return;
        }
        getInOrder(root.left);
        inOrderArr.add(root.val);
        getInOrder(root.right);
    }
}

在这里插入图片描述

你可能感兴趣的:(力扣,leetcode,python,算法)