标签:leetcode
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小的数。
中序遍历二叉排序树,将元素存在数组中,数组中的第K个数就是第K小的数。
递归
/** * 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: void zhongxu(TreeNode* root,int* a,int& i){ if(!root) return; zhongxu(root->left,a,i); a[i++]=root->val; zhongxu(root->right,a,i); } int kthSmallest(TreeNode* root, int k) { int a[10000]; int i=1; zhongxu(root,a,i); return a[k]; } };
/** * 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: void zhongxu(TreeNode* root,int& i,int& ans,int k){ if(!root) return; zhongxu(root->left,i,ans,k); if(i++==k) ans=root->val;// i==k 时, 将答案存在来 zhongxu(root->right,i,ans,k); } int kthSmallest(TreeNode* root, int k) { int i=1,ans; zhongxu(root,i,ans,k); return ans; } };
非递归
/** * 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) { vector<int>v; stack<TreeNode*>s; TreeNode* p; s.push(root); while(!s.empty()){ while(p=s.top()) // 向左走到尽头 s.push(p->left); s.pop();// 空指针出栈 if(!s.empty()){ p=s.top();//取栈顶元素 s.pop();//栈顶元素出栈 v.push_back(p->val);//加到向量vector中 s.push(p->right); } } return v[k-1]; } };
版权声明:本文为博主原创文章,未经博主允许不得转载。
leetcode-230-Kth Smallest Element in a BST
标签:leetcode
原文地址:http://blog.csdn.net/u014705854/article/details/46815165