题目描述:

给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

示例 1:

  1. 输入: root = [3,1,4,null,2], k = 1
  2. 3
  3. / \
  4. 1 4
  5. \
  6. 2
  7. 输出: 1

示例 2:

  1. 输入: root = [5,3,6,2,4,null,null,1], k = 3
  2. 5
  3. / \
  4. 3 6
  5. / \
  6. 2 4
  7. /
  8. 1
  9. 输出: 3

进阶:
如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 kthSmallest 函数?

算法实现:

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @param {number} k
  11. * @return {number}
  12. */
  13. var kthSmallest = function(root, k) {
  14. let tmp = []
  15. dft(root)
  16. var dft = tree => {
  17. if (!tree) {
  18. return null
  19. }
  20. dft(tree.left)
  21. tmp.push(tree.val)
  22. dft(tree.right)
  23. }
  24. return tmp[k - 1]
  25. };

思考:

二叉树的中序遍历有遍历出的数组排列从小到大的特点,利用该特点解决该题。

总结:

对二叉树操作的算法实现还不是很熟悉,需要了解一下。