• lintcode-11-二叉查找树中搜索区间


    二叉查找树中搜索区间

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

    样例

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

    标签

    二叉查找树 二叉树

    思路

    结合中序遍历,将遍历的节点与阈值点比较,符合条件的节点接入返回数组中。

    code

    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.
         */
        vector<int> searchRange(TreeNode* root, int k1, int k2) {
            // write your code here
            if(root == NULL)
                return vector<int>();
    
            vector<int> result;
            inorderTraversal(root, result, k1, k2);
            return result;
        }
    
        void inorderTraversal(TreeNode *root, vector<int> &order, int k1, int k2) {
            if(root->left != NULL)
                inorderTraversal(root->left, order, k1, k2);
    
            if(root->val >= k1 && root->val <= k2) {
                order.push_back(root->val);
            }
            if(root->right != NULL)
                inorderTraversal(root->right, order, k1, k2);
        }
    };
    
  • 相关阅读:
    linux进程间通信-共享内存
    where和having子句的区别
    多进程和多线程的区别(转载)
    android手机调试时不能打印Logcat日志信息
    来源不清,随笔
    转载
    C语言和Lua的交互
    python常用代码笔记
    python入门问题(windows7+python35+pycharm)
    常用matlab代码笔记
  • 原文地址:https://www.cnblogs.com/libaoquan/p/6979762.html
Copyright © 2020-2023  润新知