【两次过】Lintcode 11: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.

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);
    }
};


猜你喜欢

转载自blog.csdn.net/majichen95/article/details/80480983
今日推荐