/**
* 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:
int countleft(TreeNode* root)
{
int count=0;
if(root==nullptr) return count;
count=countleft(root->left)+countleft(root->right)+1; //左子树的节点数量等于根节点数量再加上左子树,右子树数量之和
return count;
}
int kthSmallest(TreeNode* root, int k)
{
int count=countleft(root->left); //先计算左子树的节点总数
if(count==k-1) return root->val; //若等于k-1,则根节点即为所求
if(count>k-1) return kthSmallest(root->left,k); //若大于k-1,则说明在左子树,递归即可
if(count<k-1) return kthSmallest(root->right,k-(count+1)); //若小于k-1,则说明在右子树中,此时应该在右子树中找出第k-(count+1)小的节点
return root->val;
}
};
leetcode 230 在二叉搜索树中找出第k小的元素(二分查找法)
最新推荐文章于 2020-03-25 21:55:16 发布