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

输入:root = [3,1,4,null,2], k = 1 输出:1
示例 2:

输入:root = [5,3,6,2,4,null,null,1], k = 3 输出:3
/** * 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 { public: int kthSmallest(TreeNode* root, int k) { //中序遍历 stack<TreeNode*> stk; TreeNode* node = root; while(node!=nullptr||!stk.empty()){ while(node!=nullptr){//一直向左子树的方向走 stk.push(node); node = node->left; } //向左走到了尽头 node = stk.top(); k--; if(k==0) return node->val; // 找到就提前终止 //看看右子树 node = node->right; stk.pop(); } return 0; } };
浙公网安备 33010602011771号