原题地址:http://oj.leetcode.com/problems/balanced-binary-tree/题意:判断一颗二叉树是否是平衡二叉树。解题思路:在这道题里,平衡二叉树的定义是二叉树的任意节点的两颗子树之间的高度差小于等于1。这实际上是AVL树的定义。首先要写一个计算二叉树高度的函...
分类:
编程语言 时间:
2014-05-12 14:51:47
阅读次数:
304
原题地址:http://oj.leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/题意:根据二叉树的先序遍历和中序遍历恢复二叉树。解题思路:可以参照http://www.cnblogs.com...
分类:
编程语言 时间:
2014-05-12 14:24:57
阅读次数:
324
题意是,有这样一种二叉树,每个节点的孩子数目不是0就是2,现在有N个节点,要组成一颗高度为K的这样的二叉树,问你有多少种组成方法。理所当然的想到了DP,一开始想的方程是f(i,j)为给你i
个节点,构成高度为j的这样的二叉树的种类数,转移的时候f(i,j) = Σf(k1,h1)*f(k2,h2),...
分类:
其他好文 时间:
2014-05-10 02:27:59
阅读次数:
358
一、堆与堆排序的产生及定义
在简单选择排序中,每次从n个元素中比较n-1次选取最小的元素,这很好理解,但是前面比较过的数据在之后还要重新比较,这将花费大量的运算时间。堆排序算法就很好的解决了这个问题,堆排序在每次选择到最小记录的同时会根据比较结果对其他数据进行调整,堆排序的时间复杂度为O(Nlog....
分类:
其他好文 时间:
2014-05-10 00:25:14
阅读次数:
299
前序和中序构建二叉树后序和中序构建二叉树分析:主要思路就是
在中序中找根节点然后划分左右子树,具体如下:1. 查找根节点。 我们知道前序序列的第一个元素 和 后序序列的最后一个元素 肯定是根节点,我们就以此为突破口2.
确定根节点的坐标。 我们在 中序序列中找到 根节点 的下标。3. 分割左右子树。...
分类:
其他好文 时间:
2014-05-09 23:17:30
阅读次数:
458
这道题其实跟二叉搜索树没有什么关系,给定n个节点,让你求有多少棵二叉树也是完全一样的做法。思想是什么呢,给定一个节点数x,求f(x),f(x)跟什么有关系呢,当然是跟他的左右子树都有关系,所以可以利用其左右子树的结论,大问题被成功转化成了小问题。最熟悉的方法是递归和dp,这里显然有大量的重复计算,用dp打表好一些。
后来实验的同学说,这其实是一个Catalan数,上网查了一下,果然啊。Catal...
分类:
其他好文 时间:
2014-05-09 14:47:53
阅读次数:
229
基本C/C++、STL(vector、set、map、queue、string、algorithm)枚举、贪心、递归、分治、递推、模拟构造、位运算、常数优化数据结构队列、堆、栈、链表排序(插入、冒泡、快速、归并、堆、桶、基数)二分查找、散列表、并查集、哈夫曼树排序二叉树、左偏树、平衡树(Splay/...
分类:
其他好文 时间:
2014-05-09 08:10:36
阅读次数:
338
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。
输入:
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行为一个整数n(1
输入的第二行包括n个整数(其中每个元素a的...
分类:
其他好文 时间:
2014-05-09 06:22:41
阅读次数:
318
堆的删除
按定义,堆中每次都只能删除第0个数据。为了便于重建堆,实际的操作是将最后一个数据的值赋给根结点,然后再从根结点开始进行一次从上向下的调整。调整时先在左右儿子结点中找最小的,如果父结点比这个最小的子结点还小说明不需要调整了,反之将父结点和它交换后再考虑后面的结点。相当于从根结点将一个数据的“下沉”过程。
堆的插入
每次插入都是将新数据放在数组最后。可以发现从这个新...
分类:
其他好文 时间:
2014-05-09 02:16:57
阅读次数:
255