题目:
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。
这道题在leetCode上难度为中等,但我觉得其实只要掌握了二叉搜索树遍历的特点就很好解决了。二叉搜索树的中序遍历顺序是由低到高的升序,所以我们只需要找到中序遍历第k个遍历出来的就行了。
代码:
1 class Solution { 2 private int i = 0; 3 private int val = 0; 4 public void ksmall(TreeNode root, int k) { 5 if (root == null) { 6 return; 7 } 8 ksmall(root.left, k); 9 if (k == ++i) { 10 val = root.val; 11 } 12 ksmall(root.right, k); 13 } 14 public int kthSmallest(TreeNode root, int k) { 15 ksmall(root,k); 16 return val; 17 18 } 19 }