class TreeNode {
constructor(val = 0, left = null, right = null) {
this.val = val;
this.left = left;
this.right = right;
}
}
function kthSmallest(root, k) {
let count = 0;
let result = null;
function inorder(node) {
if (!node || result !== null) return;
inorder(node.left); // traverse left subtree first
count++;
if (count === k) {
result = node.val; // found kth smallest
return;
}
inorder(node.right); // traverse right subtree
}
inorder(root);
return result;
}
// Driver code
const root = new TreeNode(5,
new TreeNode(3,
new TreeNode(2),
new TreeNode(4)
),
new TreeNode(7,
null,
new TreeNode(8)
)
);
const k = 3;
console.log(kthSmallest(root, k));if (!node || result !== null) return;
stop traversal if node is null or kth smallest already found
inorder(node.left); // traverse left subtree first
explore smaller values first by going left
increment count when visiting a node in order
if (count === k) { result = node.val; return; }
check if current node is kth smallest and save result
inorder(node.right); // traverse right subtree
explore larger values after left and current node