Medium
Given the root
of a binary search tree, and an integer k
, return the kth
smallest value (1-indexed) of all the values of the nodes in the tree.
Example 1:
Input: root = [3,1,4,null,2], k = 1
Output: 1
Example 2:
Input: root = [5,3,6,2,4,null,null,1], k = 3
Output: 3
Constraints:
n
.1 <= k <= n <= 104
0 <= Node.val <= 104
Follow up: If the BST is modified often (i.e., we can do insert and delete operations) and you need to find the kth smallest frequently, how would you optimize?
/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($val = 0, $left = null, $right = null) {
* $this->val = $val;
* $this->left = $left;
* $this->right = $right;
* }
* }
*/
class Solution {
private $k;
private $count = 0;
private $val;
/**
* @param TreeNode $root
* @param Integer $k
* @return Integer
*/
public function kthSmallest($root, $k) {
$this->k = $k;
$this->calculate($root);
return $this->val;
}
private function calculate($node) {
if ($node->left == null && $node->right == null) {
$this->count++;
if ($this->count == $this->k) {
$this->val = $node->val;
}
return;
}
if ($node->left != null) {
$this->calculate($node->left);
}
$this->count++;
if ($this->count == $this->k) {
$this->val = $node->val;
return;
}
if ($node->right != null) {
$this->calculate($node->right);
}
}
}