剑指offer54-AcWing-70. 二叉搜索树的第k个结点
给定一棵二叉搜索树,请找出其中的第k小的结点。
你可以假设树和k都存在,并且1≤k≤树的总结点数。
样例
输入:root = [2, 1, 3, null, null, null, null] ,k = 3
2
/ \
1 3
输出:3
思路:
树是二叉搜索树,因此中序遍历访问链表,记录访问的第K个结点。
C++ code:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* Inorder(TreeNode* root, int &k){
TreeNode* target = NULL;
if(root->left != NULL){
target = Inorder(root->left, k);
}
if(target == NULL){
if(k == 1){
target = root;
}
k--;
}
if(target == NULL && root->right != NULL){
target = Inorder(root->right, k);
}
return target;
}
TreeNode* kthNode(TreeNode* root, int k) {
if(root == NULL || k == 0){
return NULL;
}
return Inorder(root, k);
}
};