zoukankan      html  css  js  c++  java
  • Lintcode---二叉查找树中搜索区间

    给定两个值 k1 和 k2(k1 < k2)和一个二叉查找树的根节点。找到树中所有值在 k1 到 k2 范围内的节点。即打印所有x (k1 <= x <= k2) 其中 x 是二叉查找树的中的节点值。返回所有升序的节点值。

    样例

    如果有 k1 = 10 和 k2 = 22, 你的程序应该返回 [12, 20, 22].

        20
       /  
      8   22
     / 
    4   12

       

    其实,一开始看到这个问题,有点像是线段树。

       
     
    思路: 将问题想明白,利用所给出的数据结构所具有的性质。

       
        问题的本质就是进行二叉查找树的中序遍历,不过在访问节点的时候加上了一些条件。
       
        so easy, 二叉查找树,利用中序遍历,就可以从小到大进行输出了;
     
    /**
     * 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.
         */
        /*
        其实,一开始看到这个问题,有点像是线段树。
        
        思路: 将问题想明白,利用所给出的数据结构所具有的性质。
        
        问题的本质就是进行二叉查找树的中序遍历,不过在访问节点的时候加上了一些条件。
        
        so easy, 二叉查找树,利用中序遍历,就可以从小到大进行输出了;
        
        */
        
        vector<int> vec;
        vector<int> searchRange(TreeNode* root, int k1, int k2) {
            // write your code here
            if(root==NULL){
                return vec;
            }
            
            if(root->left!=NULL){
                searchRange(root->left,k1,k2);
            }
            
            if(root->val>=k1&&root->val<=k2){
                vec.push_back(root->val);
            }
            
            if(root->right!=NULL){
                searchRange(root->right,k1,k2);
            }
            
            return vec;
        }
    };
    
  • 相关阅读:
    算数表达式二叉树
    Java汉诺塔算法
    Struts2中的设计模式ThreadLocal模式续
    Java基础知识总结(五)
    Java数组扩容算法及Java对它的应用
    Java Arrays.sort源代码解析
    Java字符串排列算法
    Java基础知识总结(三)
    SSIS OLE DB Source中执行带参数的存储过程
    Sql server中Collation conflict问题
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/7110975.html
Copyright © 2011-2022 走看看