法1:中序遍历
Python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
res = list()
self.mid_travel(root, res, k)
return res[k-1]
def mid_travel(self, root: Optional[TreeNode], res: List[int], k):
if root == None:
return
self.mid_travel(root.left, res, k)
res.append(root.val)
if len(res) == k:
return
self.mid_travel(root.right, res, k)
Java
最简练的写法,牢记!!!
class Solution {
public int kthSmallest(TreeNode root, int k) {
List<Integer> res = new ArrayList<>();
find(root, res, k);
int lastIndex = Math.min(res.size() - 1, k - 1);
return res.get(lastIndex);
}
public void find(TreeNode root, List<Integer> res, int k) {
if (root == null || res.size() == k) {
return;
}
find(root.left, res, k);
res.add(root.val);
find(root.right, res, k);
}
}