题目来源
本题来源为:
题目描述
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
算法原理
本题我们采取两个全局变量+中序遍历即可实现,具体我们看下面这个例子:
我们要获取第6小的元素:
我们初始化让count=6,ret=0;从最左节点进行中序遍历:遍历到第一个节点时,就让count-1,将节点值存到ret中,依次内推,当count–到0时,此时的ret就是我们的结果。
代码实现
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { int count=0; int ret=0; public: int kthSmallest(TreeNode* root, int k) { count=k; dfs(root); return ret; } void dfs(TreeNode* root) { if(root==nullptr||count==0) return ; dfs(root->left); count--; if(count==0) ret=root->val; dfs(root->right); } };