主题
面试速答(先看这里)
**一句话结论:**在二叉搜索树中查找第k小的元素,可以利用二叉搜索树的一个重要性质: 二叉搜索树的中序遍历序列是有序的。
60秒标准回答:
在二叉搜索树中查找第k小的元素,可以利用二叉搜索树的一个重要性质: 二叉搜索树的中序遍历序列是有序的。因此,可以通过对二叉搜索树进行中序遍历并计数来找到第k小的元素
这段代码首先定义了一个辅助方法inOrderTraverse,用于对二叉搜索树进行中序遍历。在遍历过程中,使用一个计数器count来记录当前已经遍历过的节点数量。当count等于k时,表示当前节点就是第k小的元素,此时将当前节点的值赋给result并返回
在主方法kthSmallest中,调用inOrderTraverse方法并传入根节点和k。中序遍历完成后,result就是第k小的元素
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**这段代码首先定义了一个辅助方法inOrderTraverse,用于对二叉搜索树进行中序遍历。
- **要点2:**在主方法kthSmallest中,调用inOrderTraverse方法并传入根节点和k。
**记忆锚点:**inOrderTraverse → result → count → kthSmallest → 先定义了一个辅助方法 → 给定一个二叉搜索树
加分表达:
- 因此,可以通过对二叉搜索树进行中序遍历并计数来找到第k小的元素。
追问准备:
- 围绕「inOrderTraverse」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「result」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「count」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
在二叉搜索树中查找第k小的元素,可以利用二叉搜索树的一个重要性质:二叉搜索树的中序遍历序列是有序的。因此,可以通过对二叉搜索树进行中序遍历并计数来找到第k小的元素。
java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
private int count = 0; // 用于计数已遍历的节点
private int result = Integer.MIN_VALUE; // 存储第k小的元素
public int kthSmallest(TreeNode root, int k) {
inOrderTraverse(root, k);
return result;
}
private void inOrderTraverse(TreeNode node, int k) {
if (node == null) return;
// 先遍历左子树
inOrderTraverse(node.left, k);
// 访问节点
count++;
if (count == k) {
result = node.val;
return; // 找到第k小的元素后返回
}
// 遍历右子树
inOrderTraverse(node.right, k);
}
}这段代码首先定义了一个辅助方法inOrderTraverse,用于对二叉搜索树进行中序遍历。在遍历过程中,使用一个计数器count来记录当前已经遍历过的节点数量。当count等于k时,表示当前节点就是第k小的元素,此时将当前节点的值赋给result并返回。
在主方法kthSmallest中,调用inOrderTraverse方法并传入根节点和k。中序遍历完成后,result就是第k小的元素。