Search Range in Binary Search Tree

题目:

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.

分析:

认真读题目,别人家问的<=,结果自己代码只写了<。

解法:

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.
     */
    void dfs(TreeNode* root, vector<int>& res, int k1, int k2) {
        if (root == NULL) {
            return;
        }
        if (root->val > k1) {
            dfs(root->left, res, k1, k2);
        }
        if (k1 <= root->val && root->val <= k2) {
            res.push_back(root->val);
        }
        if (root->val <= k2) {
            dfs(root->right, res, k1, k2);
        }
    } 

    vector<int> searchRange(TreeNode* root, int k1, int k2) {
        // write your code here
        if (root == NULL) {
            return vector<int>();
        }
        vector<int> res;
        dfs(root, res, k1, k2);
        return res;
    }
};

results matching ""

    No results matching ""