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
If k1 = 10
and k2 = 22
, then your function should return [12, 20, 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 { public: /** * @param root: param root: The root of the binary search tree * @param k1: An integer * @param k2: An integer * @return: 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> result; inorderTravel(root,result,k1,k2); return result; } void inorderTravel(TreeNode * node,vector<int> &result,int k1,int k2) { if(node == NULL) return; if(node->left != NULL) inorderTravel(node->left,result,k1,k2); if(node->val >= k1 && node->val <= k2) result.push_back(node->val); if(node->right != NULL) inorderTravel(node->right,result,k1,k2); } };