Search Range in Binary Search Tree
Posted 北叶青藤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Search Range in Binary Search Tree相关的知识,希望对你有一定的参考价值。
Given two values k1 and k2 (where k1 < k2) and a root pointer to a Binary Search Tree. Find all the keys of tree in range k1 to k2. i.e. print all x such that k1<=x<=k2 and x is a key of given BST. Return all the keys in ascending order.
Example
If k1 = 10
and k2 = 22
, then your function should return[12, 20, 22]
.
20
/ \\
8 22
/ \\
4 12
Tags
分析:
这题还是很简单的,只要根据root的值和k1, k2的值分三种情况讨论就可以了。
1 /** 2 * Definition of TreeNode: 3 * public class TreeNode { 4 * public int val; 5 * public TreeNode left, right; 6 * public TreeNode(int val) { 7 * this.val = val; 8 * this.left = this.right = null; 9 * } 10 * } 11 */ 12 public class Solution { 13 /** 14 * @param root: The root of the binary search tree. 15 * @param k1 and k2: range k1 to k2. 16 * @return: Return all keys that k1<=key<=k2 in ascending order. 17 */ 18 public ArrayList<Integer> searchRange(TreeNode root, int k1, int k2) { 19 // write your code here 20 ArrayList<Integer> list = new ArrayList<Integer>(); 21 if (k1 <= k2) { 22 traverse(root, k1, k2, list); 23 } 24 Collections.sort(list); 25 return list; 26 } 27 28 public void traverse(TreeNode node, int k1, int k2, ArrayList<Integer> list) { 29 if (node != null) { 30 if (node.val < k1) { 31 traverse(node.right, k1, k2, list); 32 } else if (node.val > k2) { 33 traverse(node.left, k1, k2, list); 34 } else { 35 list.add(node.val); 36 traverse(node.left, k1, k2, list); 37 traverse(node.right, k1, k2, list); 38 } 39 } 40 } 41 }
参考请注明出处:cnblogs.com/beiyeqingteng/
以上是关于Search Range in Binary Search Tree的主要内容,如果未能解决你的问题,请参考以下文章
Lintcode11 Search Range in Binary Search Tree solution 题解
Get Keys In Binary Search Tree In Given Range - Easy
leetcode@ [327] Count of Range Sum (Binary Search)