1. 程式人生 > >LeetCode 230. 二叉搜索樹中第K小的元素 (平衡樹)

LeetCode 230. 二叉搜索樹中第K小的元素 (平衡樹)

如何 attack 有效 tac 並且 att eno del root

題目

給定一個二叉搜索樹,編寫一個函數 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
進階:
如果二叉搜索樹經常被修改(插入/刪除操作)並且你需要頻繁地查找第 k 小的值,你將如何優化 kthSmallest

函數?

題解

第一次寫LeetCode, 還不太會用。

public裏在定義一個函數遞歸中序遍歷, 記錄答案, 找到的時候return就可以了。

不要吐槽變量名

/**
 * 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 index = 0, final_attack_ride;
  void Solve(TreeNode* root, const int &k) {
    if (root->left) {
      Solve(root->left, k);
    }
    if (index >= k) return;
    if (++index == k) {
      final_attack_ride = root->val;
      return;
    }
    if (root->right) {
      Solve(root->right, k);
    }
  }
  int kthSmallest(TreeNode* root, int k) {
    Solve(root, k);
    return final_attack_ride;
  }
};

LeetCode 230. 二叉搜索樹中第K小的元素 (平衡樹)