LintCode Search Range in Binary Search Tree
2015-09-23 16:17
302 查看
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.
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { 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 vector<int> seen; search(root, k1, k2, seen); return seen; } void search(TreeNode* root, int k1, int k2, vector<int>& seen) { if (k2 < k1 || root == NULL) { return; } if (k1 >= root->val) { // range all in right tree if (k1 == root->val) { seen.push_back(k1); } search(root->right, k1, k2, seen); } else if (k2 <= root->val) { // range all in left tree search(root->left, k1, k2, seen); if (k2 == root->val) { seen.push_back(k2); } } else { // normal search(root->left, k1, root->val, seen); seen.push_back(root->val); search(root->right, root->val, k2, seen); } } };
把情况合并一下可以写成如下形式:
class Solution { 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 vector<int> seen; search(root, k1, k2, seen); return seen; } void search(TreeNode* root, int k1, int k2, vector<int>& seen) { if (k2 < k1 || root == NULL) { return; } if (k1 < root->val) { search(root->left, k1, min(root->val, k2), seen); } if (k1 <= root->val && root->val <= k2) { seen.push_back(root->val); } if (k2 > root->val) { search(root->right, max(root->val, k1), k2, seen); } } };
相关文章推荐
- Configure iSCSI Target on RHEL7
- Configure iSCSI Target on RHEL7
- MySQL问题
- leetcode 120 Triangle(难易度:Medium)
- ffmepg开发历程
- Office 2016 新特性
- 如何检查Xcode是否被植入了XcodeGhost
- Java中的关键字null
- 如何实现数组的循环移位
- 黑马程序员——Java语言基础:多态、内部类
- mycat学习日记:全局sequence
- 【斜率DP】bzoj1597: [Usaco2008 Mar]土地购买
- Android利用Filter过滤数据
- MSSQL 关于16进制与字符串以及10进制的简单转换,以及SQL的16进制的截取
- PAT(甲级)1007
- win7 下启动mysql
- 树套树
- 测试用例
- np_xtcxyczjh-III 整理I[小公码(宏 错误包装) Makefile]
- 工厂模式 Factory Pattern