<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Search Range in Binary Search Tree ### Source - lintcode: [(11) Search Range in Binary Search Tree](http://www.lintcode.com/en/problem/search-range-in-binary-search-tree/) ### Problem Given two values k1 and k2 (where k1 < k2) and a root pointer to a BinarySearch Tree. Find all the keys of tree in range k1 to k2. i.e. print all xsuch that k1<=x<=k2 and x is a key of given BST. Return all the keys inascending order. #### Example If k1 = `10` and k2 = `22`, then your function should return `[12, 20, 22]`. ~~~ 20 / \ 8 22 / \ 4 12 ~~~ ### 題解 - 中序遍歷 中等偏易難度題,本題涉及到二叉查找樹的按序輸出,應馬上聯想到二叉樹的中序遍歷,對于二叉查找樹而言,使用中序遍歷即可得到有序元素。對每次訪問的元素加以判斷即可得最后結果,由于 OJ 上給的模板不適合遞歸處理,新建一個私有方法即可。 ### C++ ~~~ /** * 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. */ vector<int> searchRange(TreeNode* root, int k1, int k2) { vector<int> result; inorder_dfs(result, root, k1, k2); return result; } private: void inorder_dfs(vector<int> &ret, TreeNode *root, int k1, int k2) { if (NULL == root) { return; } inorder_dfs(ret, root->left, k1, k2); if ((root->val >= k1) && (root->val <= k2)) { ret.push_back(root->val); } inorder_dfs(ret, root->right, k1, k2); } }; ~~~ ### Java ~~~ /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @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. */ public ArrayList<Integer> searchRange(TreeNode root, int k1, int k2) { ArrayList<Integer> result = new ArrayList<Integer>(); helper(root, k1, k2, result); return result; } private void helper(TreeNode root, int k1, int k2, ArrayList<Integer> result) { if (root == null) return; // in-order binary tree iteration helper(root.left, k1, k2, result); if (k1 <= root.val && root.val <= k2) { result.add(root.val); } helper(root.right, k1, k2, result); } } ~~~ ### 源碼分析 以上為題解思路的簡易實現,可以優化的地方為「剪枝過程」的處理——不遞歸遍歷不可能有解的節點。優化后的`inorder_dfs`如下: ~~~ void inorder_dfs(vector<int> &ret, TreeNode *root, int k1, int k2) { if (NULL == root) { return; } if ((NULL != root->left) && (root->val > k1)) { inorder_dfs(ret, root->left, k1, k2); } // cut-off for left sub tree if ((root->val >= k1) && (root->val <= k2)) { ret.push_back(root->val); } // add valid value if ((NULL != root->right) && (root->val < k2)) { inorder_dfs(ret, root->right, k1, k2); } // cut-off for right sub tree } ~~~ ****> 「剪枝」的判斷條件容易出錯,應將當前節點的值與`k1`和`k2`進行比較而不是其左子節點或右子節點的值。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看