Day 1.29
二叉搜索树中第K小的元素
题目
思路
对二叉树遍历,找到第k小的元素
递归法遍历二叉树:
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<>();
getAns(root, ans);
return ans;
}
private void getAns(TreeNode node, List<Integer> ans) {
if (node == null) {
return;
}
getAns(node.left, ans);
ans.add(node.val);
getAns(node.right, ans);
}
遍历后找到第k小的元素:
class Solution {
int num = 0;
int res;
public int kthSmallest(TreeNode root, int k) {
getRes(root, k);
return res;
}
private void getRes(TreeNode node, int k) {
if (node == null) {
return;
}
getRes(node.left, k);
num++;
if (num == k) {
res = node.val;
return;
}
getRes(node.right, k);
}
}