- 浏览: 23955 次
- 性别:
- 来自: 杭州
最新评论
-
as_you_2007:
哎,厉害啊,我还傻乎乎的真的去建立一颗树。。。
已知二叉树的前序/后序遍历和中序遍历,求后序/前序遍历
文章列表
设计模式——适配器模式
- 博客分类:
- 设计模式
适配器模式——将一个类的接口,转换成客户期望的另一个接口,让原本不兼容的类之间能够相互通信
假设我们有2个不同的接口:
public interface ICat {
public void catVoice();
}
public interface IDog {
public void dogVoice();
}
当继承自ICat接口的Cat对象不够用的时候,我们可以使用适配器模式,让一个继承IDog接口的Dog对象来冒充一下
public class Adapter implements ICat {
...
设计模式——代理模式
- 博客分类:
- 设计模式
先看一个简单的例子,假设有接口ISubject:
public interface ISubject {
public void doSomething();
}
这是ISubject的实现Subject:
public class Subject implements ISubject {
/* (non-Javadoc)
* @see ISubject#doSomething()
*/
@Override
public void doSomething() {
System ...
Splay Tree
- 博客分类:
- 算法与数据结构
Splay Tree 是二叉查找树的一种,它与平衡二叉树、红黑树不同的是,Splay Tree从不强制地保持自身的平衡,每当查找到某个节点n的时候,在返回节点n的同时,Splay Tree会将节点n旋转到树根的位置,这样就使得Splay Tree天生有着一种类似缓存的能力,因为每次被查找到的节点都会被搬到树根的位置,所以当80%的情况下我们需要查找的元素都是某个固定的节点,或者是一部分特定的节点时,那么在很多时候,查找的效率会是O(1)的效率!当然如果查找的节点是很均匀地分布在不同的地方时,Splay Tree的性能就会变得很差了,但Splay Tree的期望的时间复杂度还是O(nlogn) ...
矢量
如果一条线段的端点是有次序之分的话,那么这种线段就称为 有向线段,如果有向线段p1p2的起点p1在坐标的原点,则可以把它称为矢量 p2
矢量的加减
设二维矢量 P = (x1, y1), Q = (x2, y2),则 P + Q = (x1 + x2, y1 + y2), P - Q = (x1 - x2, y1 - y2),且有 P + Q = Q + P, P - Q = -(Q - P)
矢量叉积
设矢量 P = (x1, y1), Q = (x2, y2),则 P * Q = x1 * y2 - x2 * y1; 其结果是一个由 ...
并查集 (Union-Find Sets) 是一种简单而用途广泛的高级数据结构
并查集可以描述这样一个逻辑结构:有若干个元素,将其分成若干个不相交的集合,每个集合相互独立
使用并查集可以方便地进行以下两种操作:
1、 判断两个元素是否属于同一个集合
2、 合并两个元素所在的集合
并查集机构的储存结构为一棵采用双亲表示法的树,通常用数组来储存。每个元素还有权值:
#define MAX 1000
struct Union_Find_Sets
{
int parent;
int rank;
}set[MAX];
其中parent的值为正数时,表示该节点的父 ...
第1章
为防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处理块
使用 #include<filename.h> 引用标准库头文件,使用 #include"filename.h" 引用非标准库头文件
头文件中只存放“声明”,不存放“定义”
第2章
...
首先,我们看看前序、中序、后序遍历的特性:
前序遍历:
1.访问根节点
2.前序遍历左子树
3.前序遍历右子树
中序遍历:
1.中序遍历左子树
2.访问根节点
3.中序遍历右子树
后序遍历:
1.后序遍历左子树
2.后序遍历右子树
3.访问根节点
好了,先说说用前序遍历和中序遍历求后序遍历
假设前序遍历为 adbgcefh, 中序遍历为 dgbaechf
前序遍历是先访问根节点,然后再访问子树的,而中序遍历则先访问左子树再访问根节点
那么把前序的 a 取出来,然后查找 a 在中序遍历中的位置就得到 dgb a echf
那 ...
发现在项目开发的过程中,许多程序员往往因为赶项目进度而忽略了代码的质量,在这里我整理了一些基本的编码规范,希望对大家有用
1.对象间的比较判断
String str = "abc";
//Java和C++不同,对象间的相等判断不能使用 ==, !=
if (str == "bbc") {
...
}
应写成
//想想为什么不写成 str.equals("bbc") 呢?
if ("bbc".equals(str)) {
...
}
或者是
//同一使用StringUt ...