11. 二叉查找树中搜索区间

时间:2020-11-28 20:19:56

11. 二叉查找树中搜索区间

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

样例

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

    20
   /  \
  8   22
 / \
4   12

思路:稍稍改变中序遍历的逻辑

 1 class Solution {
 2 public:
 3     /**
 4      * @param root: param root: The root of the binary search tree
 5      * @param k1: An integer
 6      * @param k2: An integer
 7      * @return: return: Return all keys that k1<=key<=k2 in ascending order
 8      */
 9     void DFS(TreeNode *root, int k1, int k2, vector<int> &result)
10     {
11         if(root==0)return;
12         if(root->val>k2)DFS(root->left, k1, k2, result);
13         else if(root->val<k1)DFS(root->right, k1, k2, result);
14         else{
15             DFS(root->left, k1, k2, result);
16             result.push_back(root->val);//中序遍历放中间
17             DFS(root->right, k1, k2, result);
18         }
19     }
20     vector<int> searchRange(TreeNode * root, int k1, int k2) {
21         vector<int> result;
22         DFS(root, k1, k2, result);
23         return result;
24     }
25 };