这道题理解透彻的话,其实还是考二叉树的中序遍历,因为二叉搜索树中序遍历结果刚好是从小到大的有序数组,
两种常规思路,就是中序遍历迭代还是不够理解
方法一 中序遍历 迭代
var kthSmallest = function (root, k) {
//这一步 s = [] 也行 但是运行会慢一点
const s = [root];
while (root || s.length) {
// 中序遍历 所以先找左节点
while (root) {
s.push(root)
root = root.left;
}
root = s.pop();
if (--k === 0) {
break;
}
root = root.right;
}
return root.val;
};
方法二 递归
var kthSmallest = function (root, k) {
let res;
const inOrder = (node) => {
if (k && node) {
// 先遍历左子树
inOrder(node.left);
if (--k === 0) {
return res = node.val;
};
// 在遍历右子树
inOrder(node.right);
}
}
inOrder(root)
return res;
};