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

    原题网址:https://www.lintcode.com/zh-cn/problem/search-range-in-binary-search-tree/#

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

    样例

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

        20
       /  
      8   22
     / 
    4   12
    
    标签 
     
    思路:中序遍历基础上加入判断条件,如果节点值在K1~K2之间则插入结果数组。
     
    AC代码:
    /**
     * 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>  re;
         if (root!=NULL&&k1<=k2)
         {
             inOrderTra(root,re,k1,k2);
         }
         return re;
        }
        
        void inOrderTra(TreeNode * root,vector<int> &result,int K1,int K2)
    {
        if (root->left!=NULL)
        {
            inOrderTra(root->left,result,K1,K2);
        }
        if (root->val>=K1&&root->val<=K2)
        {
            result.push_back(root->val);
        }
        if (root->right!=NULL)
        {
            inOrderTra(root->right,result,K1,K2);
        }
        
    }
    };
     
  • 相关阅读:
    safeNet
    网店
    微信公众号自定义菜单与回车
    西游记对教育的启发
    zencart资源
    cmd批处理常用符号详解
    div垂直居中
    git工作量统计
    VS2012变化的快捷键:
    sql 树 递归
  • 原文地址:https://www.cnblogs.com/Tang-tangt/p/8919964.html
Copyright © 2011-2022 走看看