leetcode[230]:Kth Smallest Element in a BST

来源:互联网 发布:淘宝订单多长时间失效 编辑:程序博客网 时间:2024/05/16 02:14

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?

Hint:
1.Try to utilize the property of a BST.
2.What if you could modify the BST node’s structure?
3.The optimal runtime complexity is O(height of BST).

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     struct TreeNode *left; *     struct TreeNode *right; * }; */int kthSmallest(struct TreeNode* root, int k) {    struct TreeNode stack[100];    struct TreeNode *tmp;    int i=0;    int l=0;    tmp=root;    while(1)    {        if(tmp->left)        {            stack[i++] = *tmp;            stack[i-1].left=NULL;            tmp=tmp->left;            continue;        }        if(++l==k) return tmp->val;        if(tmp->right)        {            tmp=tmp->right;            continue;        }        if(i==0) break;        tmp = &stack[--i];    }}

根据中序遍历,遍历到第k个元素即可。

0 0
原创粉丝点击