二叉搜索树中第 K 小的元素-中等

难度:中等

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

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


示例:

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


解题思路:

var kthSmallest = function (root, k) {
  let count = 0;
  let res = -1;
  // 中序遍历,何为中序?
  // 即遍历顺序为:node.left -> node -> node.right
  // 为什么可以这么做?
  // BST特征决定:节点 N 左子树上的所有节点的值都小于等于节点 N 的值
  //          :  节点 N 右子树上的所有节点的值都大于等于节点 N 的值
  function order(node) {
    if (!node) {
      return;
    }
    order(node.left); // 如果left 一直存在,则一直深度遍历left
    if (count >= k) {
      // 提前终止
      return;
    }
    if (node.val !== null) {
      // 遍历一次中序节点,则找到的当前值为第count大,只要不为count 大,需要继续遍历(上一句逻辑)
      res = node.val;
      count++;
    }
    order(node.right);
  }
  order(root);
  return res;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
最后更新时间: 5/27/2020, 7:50:23 PM