《leetCode》:Kth Smallest Element in a BST

题目

Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.

Note:
You may assume k is always valid, 1 ≤ k ≤ BST’s total elements.

Follow up:
What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?

思路

由于是二叉搜索树,根据二叉树的特点,我们获取其中序遍历并保存在一个数组中,这个数据就是一个排序好的数组,获取这个数组的第k个元素即可。

/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */
#define N  10000
int * sortArr;
int g_index=0;
void inorder(struct TreeNode* root){
    if(root==NULL){
        return ;
    }
    inorder(root->left);
    sortArr[g_index++]=root->val;
    inorder(root->right);
}
int kthSmallest(struct TreeNode* root, int k) {
    if(root==NULL||k<0){
        return 0;
    }
    sortArr=(int *)malloc(N*sizeof(int));
    if(sortArr==NULL){
        exit(EXIT_FAILURE);
    }
    g_index=0;
    inorder(root);
    return sortArr[k-1];
}

你可能感兴趣的:(LeetCode,BST,kth,Smallest)