您的位置:首页 > 其它

lintcode:Search Range in Binary Search Tree

2015-05-16 22:22 267 查看
Given two values k1 and k2 (where k1 < k2) and a root pointer to a Binary Search Tree. Find all the keys of tree in range k1 to k2. i.e. print all x such that k1<=x<=k2 and x is a key of given BST. Return all the keys in ascending order.

Example

For example, if k1 = 10 and k2 = 22, then your function should print 12, 20 and 22.

20

/ \

8 22

/ \

4 12

/**
* Definition of TreeNode:
* class TreeNode {
* public:
*     int val;
*     TreeNode *left, *right;
*     TreeNode(int val) {
*         this->val = val;
*         this->left = this->right = NULL;
*     }
* }
*/
class Solution {

class BSTIterator {
private:
stack<TreeNode* > mStack;

public:
BSTIterator(TreeNode *root) {

TreeNode *pCurNode = root;

while (pCurNode)
{
mStack.push(pCurNode);
pCurNode = pCurNode->left;
}
}

bool hasNext() {

if (mStack.size() > 0)
return true;

return false;
}

int next() {

TreeNode* retNode = mStack.top();
mStack.pop();

TreeNode *pCurNode = retNode;
if (pCurNode->right)
{
pCurNode = pCurNode->right;
while (pCurNode)
{
mStack.push(pCurNode);
pCurNode = pCurNode->left;
}
}

return retNode->val;
}
};

public:
/**
* @param root: The root of the binary search tree.
* @param k1 and k2: range k1 to k2.
* @return: Return all keys that k1<=key<=k2 in ascending order.
*/

vector<int> searchRange(TreeNode* root, int k1, int k2) {
// write your code here

BSTIterator itr(root);

vector<int> retVector;

while (itr.hasNext())
{
int curVal = itr.next();

if (curVal >= k1 && curVal <= k2)
{
retVector.push_back(curVal);
}
}

return retVector;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: