【数据结构】树与二叉树
树与二叉树前置知识
树和图属于非线性结构(一对多),其他线性结构属于一对一(前驱和后驱唯一)。
树的其他表示方式:嵌套集合,凹入表示,广义表
树的度是节点度的最大值
有序树、无序树
森林:是 m 棵互不相交的树的集合(把根节点删除,树就变成了森林)
二叉树的逻辑结构和存储结构
完全二叉树的高度 h 和节点数 n 的关系 $2^{(h-1)}-1 < n < 2^h-1$ , 变形为 $h = [log_2n](向下取整) +1$ 或者 $h = [log_2 (n+1)] (向上取整)$
总分支数量 = 总结点数
叶节点数$N_0$,单分支节点数$N_1$,双分支节点数$N_2$
则有总结点数 $=N_0+N_1+N_2$
总分支数 $=N_1+2N_2$
$N_0=N_2+1$(叶子结点数量等于双分支节点数量+1)
完全二叉树顺序存储结构:比如某个节点序号为 n,则其左孩子序号为 2n+1,右孩子的序号为 2n+2
$N(总结点数) = e(边数)+1$
$e = N00+N11+N22+……Nnn$(这两条公式都可以通过把所有分支拿到同一边来完成证明)二叉树链式存 ...
【设计模式】简单工厂模式
简单工厂模式一句话概括简单工厂的特点就是,使用 唯一工厂类 来完成 抽象产品类 对象实例化的工作,客户端只负责调用工厂类的函数接口。举个例子,一个计算器项目中有一个名为 operationFactory 的工厂类,这个工厂类包含一个createOperate的成员方法,返回的是一个符合需求的该类型的对象。客户端只需要创建一个新对象并且把在这个对象赋值为调用 createOperator 的返回值。以下是工厂类代码:12345678910111213class Operation{Operation createOperate(string operator){Operaton oper = null;switch(operatpr){case “+”: oper = new OperationAdd(); break;//其他类似运算省略}return oper;}}以下是客户端代码:12345Operator oper;oper = OperationFactory.createOperate(“+”);oper ...