可以转化成 BST tree。注意边界条件。
class MyCalendar {
class TreeNode {
public:
TreeNode(int s, int e) {
start = s;
end = e;
left = NULL;
right = NULL;
}
int start;
int end;
TreeNode* left;
TreeNode* right;
};
TreeNode* mRoot;
public:
bool book(int s, int e) {
if(mRoot == NULL) {
mRoot = new TreeNode(s,e);
return true;
}
TreeNode* root = mRoot;
TreeNode* pre;
bool isLeft = false;
while(root) {
pre = root;
if(e <= root->start) {
isLeft = true;
root = root->left;
continue;
}
if(s >= root->end) {
isLeft = false;
root = root->right;
continue;
}
if(s < root->end || e > root->start) {
return false;
}
}
if(isLeft)
pre->left = new TreeNode(s,e);
else
pre->right = new TreeNode(s,e);
return true;
}
};