LintCode:线段树的查询
"""
Definition of SegmentTreeNode:
class SegmentTreeNode:
def __init__(self, start, end, max):
self.start, self.end, self.max = start, end, max
self.left, self.right = None, None
"""
class Solution:
def query(self, root, start, end):
if root == None:
return 0
if root.start > end or root.end < start or start > end:
return 0
if root.start >= start and root.end <= end:
return root.max
mid = root.start + (root.end - root.start) / 2
left_max = self.query(root.left, start, min(mid, end))
right_max = self.query(root.right, max(start, mid), end)
return max(left_max, right_max)
Java
/**
* Definition of SegmentTreeNode:
* public class SegmentTreeNode {
* public int start, end, max;
* public SegmentTreeNode left, right;
* public SegmentTreeNode(int start, int end, int max) {
* this.start = start;
* this.end = end;
* this.max = max
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
*@param root, start, end: The root of segment tree and
* an segment / interval
*@return: The maximum number in the interval [start, end]
*/
public int query(SegmentTreeNode root, int start, int end) {
if(root == null){
return 0;
}
if(root.start > end || root.end < start || start > end){
return 0;
}
if(root.start >= start && root.end <= end){
return root.max;
}
int mid = root.start + (root.end - root.start)/2;
int leftMax = query(root.left, start, Math.min(mid, end));
int rightMax = query(root.right, Math.max(start, mid), end);
return Math.max(leftMax, rightMax);
}
}