摘要:
堆排序是一种常见的复杂度为log复杂度的算法,具体实现如下:void adjust_element(vector<int>& data, int i){ if (2 * i + 1 >= data.size()) return ; int index = 2 * i + 1; int min = data[index]; if (2 * i + 2 < data.size() && data[2 * i + 2] < min) { min = data[2 * i + 2]; index = 2 * i + 2; }... 阅读全文
摘要:
K个有序链表,用一个函数合并它们,并返回最终合并的结果:代码如下: ListNode *mergeKLists(vector<ListNode *> &lists) { // Start typing your C/C++ solution below // DO NOT write int main() function priority_queue<Node> q; ListNode L(1); ListNode* c = &L; L.next = NULL; for (int i = ... 阅读全文
摘要:
二叉排序树,是非常特殊的一种树,具体定义见任何一本数据结构书籍。其删除一个节点需要考虑对应节点的状态,具体的说就是,是否存在左右节点,等等。需要按照以下情况讨论。1.查找待删除节点,在查找的同时需要记录一下待删除节点的父亲。2.如果待删除节点的左右节点都不存在,那么直接删除。3.如果待删除节点左子树存在右子树不存在,或者左子树不存在右子树存在。直接将其子树中存在的一边候补上来即可。4.如果待删除节点左右子树都在,这个情况是最复杂的。需要按照二叉排序树的性质从其左子树或者有子树中选择节点补到待删除节点的位置。 如果从左子树中选,就应该选择左子树中最右边的那个叶子节点(这里肯定是叶子,如果不是叶. 阅读全文
摘要:
Given a binary tree, determine if it is height-balanced.For this problem, a height-balanced binary tree is defined as a binary tree in which thedepth of the two subtreesofeverynode never differ by more than 1.刚开始的时候老往AVL树上靠,后来才知道只需要两个子树的高度 never differ by more than 1,这个就好理解多了。代码如下: bool balance(T... 阅读全文