230. 二叉搜索樹中第k小的元素

1. 題目

給定一個二叉搜索樹,編寫一個函數 kthSmallest 來查找其中第 k 個最小的元素。

說明:
你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜索樹元素個數。

示例 1:

輸入: root = [3,1,4,null,2], k = 1
   3
 /    \
1     4
  \
   2
輸出: 1
示例 2:

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

2. 分析

這道題的思路十分簡單,由於題目將樹限定爲二叉搜索樹,根據二叉搜索樹的性質,一個節點的左孩子小於該節點的值,右孩子大於該節點的值,所以利用中序遍歷可以得出這棵樹從小到大的值排序,我們可以根據 k 的值判斷,當順序進行遍歷的時候,遍歷次數等於 k 時,當前節點的值就是第 k 小的值。

3. 實現

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int kthSmallest(TreeNode* root, int k) {
        inorder(root, k);
        return res;
    }

private:
    void inorder(TreeNode* root, int &k)
    {
        if(!root || k < 0)
            return;
        
        inorder(root->left, k);
        k--;
        if(k == 0)
            res = root->val;
        else
            inorder(root->right, k);
    }
    int res = 0;
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章