js(75)~ [230] 二叉搜索树中第K小的元素

65 阅读1分钟

这道题理解透彻的话,其实还是考二叉树的中序遍历,因为二叉搜索树中序遍历结果刚好是从小到大的有序数组,

两种常规思路,就是中序遍历迭代还是不够理解

方法一 中序遍历 迭代

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;
};