您的位置:首页 > 其它

Search Range in Binary Search Tree

2017-09-09 19:56 288 查看
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.

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: 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
*/
public List<Integer> searchRange(TreeNode root, int k1, int k2) {
// write your code here
List<Integer> value = new ArrayList<>();
if (root == null) {
return value;
}
List<Integer> list = inorder(root);
for (int i = 0; i < list.size(); i++) {
if (k1 <= list.get(i) && k2 >= list.get(i)) {
value.add(list.get(i));
}
}
return value;
}
private List<Integer> inorder(TreeNode root) {
List<Integer> list = new ArrayList<>();
if (root == null) {
return list;
}
List<Integer> left = inorder(root.left);
List<Integer> right = inorder(root.right);
list.addAll(left);
list.add(root.val);
list.addAll(right);
return list;

}
}python使用左右子树的性质
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""

class Solution:
"""
@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
"""
result = []
def searchRange(self, root, k1, k2):
# write your code here
if root is None:
return self.result
self.findRange(root, k1, k2)
return self.result

def findRange(self, root, k1, k2):
if root is None:
return
if root.val > k1:
self.findRange(root.left, k1, k2)
if root.val >= k1 and root.val <= k2:
self.result.append(root.val)
if root.val < k2:
self.findRange(root.right, k1, k2)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: