摘要:
第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15 分钟内打完,甚至关掉显示器都可以把程序打出来.1.最短路(Floyd、Dijstra,BellmanFord)2. 最小生成树(先写个prim,kruscal要用并查集,不好写)3.大数(高精度)加减乘除4.二分查找. (代码可在五行以内)5.叉乘、判线段相交、然后写个凸包.6.BFS、DFS,同时熟练hash表(要熟,要灵活,代 码要简)7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式.8. 调用系统的qsort, 技巧很多,慢慢掌握.9. 任意进制间的转换 阅读全文
摘要:
在严蔚敏的《数据结构》一书中,所使用的代码存在一些小问题。原版代码就不附上了,主要问题是:1.InThreading函数的参数,应该携带pre,这应该是比较严重的问题。如果没有携带pre,则对pre的修改只是在调用的函数中的局部变量的值的修改,没有影响到原来的pre的值。2.在条件语句中,将命中概率高的语句放在前面,会提高代码效率。但严的算法中在InOrderThreading算法中,将T为NULL时放在了前面。3.InOrderThreading中,只有T为NULL时,执行Thrt->rchild = Thrt才有意义。而在T不为NULL时,要执行Thrt->rchild = p 阅读全文
摘要:
形态匀称的二叉树称为平衡二叉树 (Balanced binary tree) ,其严格定义是: 一棵空树是平衡二叉树;若 T 是一棵非空二叉树,其左、右子树为 TL 和 TR ,令 hl 和 hr 分别为左、右子树的深度。当且仅当 ①TL 、 TR 都是平衡二叉树; ② | hl - hr |≤ 1;时,则 T 是平衡二叉树。【例】如图 8.4 所示。(a)平衡二叉树(b)非平衡二叉树图8.3 平衡二叉树与非平衡二叉树相应地定义 hl - hr 为二叉平衡树的平衡因子 (balance factor) 。因此,平衡二叉树上所有结点的平衡因子可能是 -1 , 0 , 1 。换言之,若一... 阅读全文
摘要:
以这棵树来说几个基本的概念。结点的度:一个结点的子树数目称为该结点的度。(例如结点1的结点的度为3,结点2的结点的度为3,结点3的结点的度为0)。树的度:所有结点度当中,度最高的一个。(上图树的度是3)。叶子结点:上图应该是:3、5、6、7、9、10分之结点:除了叶子结点,其他的都称为分之结点,和叶子结点构成互补的关系。(1、2、4、8)内部结点:分之结点除了根结点以外的。(2、4、8)父结点:如5号结点就是2号结点的子结点。子结点:2号结点是5号结点的父结点。兄弟结点:5、6、7称为兄弟结点,出自同一个父亲2号结点。这三个概念是一个相对的概念。层次:0层、1层、2层、3层。还有一个公式就能做 阅读全文
摘要:
二叉树类的头文件“树.h”[cpp]view plaincopyprint?#include<iostream>#include<stack>//STL#include<queue>usingnamespacestd;classTree{public:Tree*Left;Tree*Right;chardata;Tree();//成员函数voidCreateTree(Tree*&node);//递归的遍历二叉树voidPreOrderVisit(Tree*T);voidInOrderVisit(Tree*T);voidLastOrderVisit(Tr 阅读全文
摘要:
先序遍历二叉树算法1源码打印?//Copyright(c)2009,ALexZhonG.Allrightsreserved.StatusPreOrderTraverse(BiTreeT,Status(Visit*)(TElemTypee)){InitStack(S);Push(S,T);p=T;//或GetTop(S,p);while(!StackEmpty(S)&&p){while(p){if(!Visit(p->data))returnERROR;Push(p->rchild);p=p->lchild;}Pop(S,p);}DestroyStack(S); 阅读全文