Leetcode -- Kth Smallest Element in a BST, leetcode
Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.
Note:
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.
Follow up:
What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How wocould you optimize the kthSmallest routine?
Hint:
Try to utilize the property of a BST. Show More Hint
Credits:
Special thanks to @ ts for adding this problem and creating all test cases.
Two ideas:
1. Space Change Time
The feature of BST is that, if it is arranged in the medium order, the incremental order is obtained. Therefore, you can use a stack to traverse in the middle order until the K element is found;
2. node number of the tree
For each node root, calculate the number of nodes in the tree with the root node as S.
If S = K, return root-> val;
If S> K, search for the smallest K element in the left subtree of the root user;
If S
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public int kthSmallest(TreeNode root, int k) { Stack<TreeNode> s = new Stack<>(); TreeNode p=root; s.push(p); int cnt=0; do{ while(p!=null){ s.push(p); p=p.left; } TreeNode top=s.pop(); cnt++; if(cnt==k){ return top.val; } p=top.right; }while(!s.empty()); return 0; }}
Idea 2 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: int kthSmallest(TreeNode* root, int k) { int left=findNodesSum(root->left); if(left+1==k){ return root->val; }else if(left+1<k){ return kthSmallest(root->right,k-left-1); }else{ return kthSmallest(root->left,k); } } int findNodesSum(TreeNode* root){ if(!root){ return 0; } int sum = findNodesSum(root->left)+findNodesSum(root->right)+1; return sum; }};
Copyright Disclaimer: This article is an original article by the blogger and cannot be reproduced without the permission of the blogger.