二叉树类(共14张PPT)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

链表实现
实现链表需要两个步骤,首先定义链表结构, 其次在程序中动态地生成结点,并与前一个 结点链接。 链表的操作主要有创建、插入以及删除等。
class list { protected:
peo* head; //链表头指针 public: list(void); ~list(); void insert(peo*);//插入结点 void del(const char*);//删除结点 void ser(const char*);//查询结点 void display();//显示结点 };
第11章 C++应用
11.1 栈类 11.2 矩阵类 11.3 链表类 11.4 二叉树类
11.1 栈类
栈是只允许在表的一端进行插入和删除等操 作的线性表,栈允许操作的一端称为栈顶, 另一端称为栈底。栈中元素的数量达到上限 称为栈满,栈中没有元素称为栈空。
栈的存储方式有顺序存储和链式存储两种。 顺序存储用一维数组的形式实现,而链式存 储用链表的形式实现。
friend ostream& operator <<(ostream& out,matrix &m); private:
int row;//矩阵行数
int col;//矩阵列数 double **p;//指向指针的指针
};
11.3 链表类
线性表的存储结构有顺序和链式两种方式。 顺序存储能够较为快捷地访问表中任意元素, 然而其空间利用率不高,做插入或删除操作 时需要移动大量元素。
每一个结点包含数据域和next指针,next node *left;//左子树
node *right;//右子树
};
二叉树类
class tree
{ private: node *root; public: tree(void);
~tree(); node* get_r();//得到根结点
void free_t(node *r);//释放二叉树结点的空间
void build_t(int d);//添加结点
void preorder(node *r);//前序遍历
void inorder(node *r); //中序遍历
void postorder(node *r); //后序遍历
};
矩阵的操作主要有加、减、乘、求逆、 转置等。
class matrix {
public: matrix(int r=2,int c=2); matrix(matrix &m);
~matrix();
void set(void);
matrix operator =(matrix &m);
matrix operator +(matrix &m);//矩阵加法 matrix operator -(matrix &m);//矩阵减法 matrix operator *(matrix &m);//矩阵乘法 double operator ()(int x,int y);
栈的操作主要有入栈、出栈、测试栈满或者 栈空等,所谓入栈,就是在栈顶插入一个元 素,新的栈顶是刚插入的这个元素;出栈就 是从栈顶删除一个元素,原栈顶元素的后继 元素自动成为新的栈顶。
栈的操作有一个十分重要的特点,即后进先 出。
栈类
template <class T> //类模板
matrix operatorc*l(maastrsix &smta);/c/矩k阵乘法
链式存储不要求逻辑上相邻的元素在物理位 置上也相邻,因此它克服了顺序存储的一些 不足,是工程实践中常用的一种数据存储方 式。
链表
链表由一些彼此存在逻辑联系的结点组成, 这些结点一般是动态生成的。每一个结点 包含数据域和next指针,next指针指向链表 中的下一个结点。
访问链表结点时由head指针指示,总是从 链表的首结点开始,依靠next指针顺序下访。
void display();//显示结点
线vo性id 表ino的rd存er储(n结odT构e 有*rp)顺;o//序中p和(序v链遍o式历id两)种;方式。 //出栈
template <classvTo>id /p/类u模sh板(T x); //入栈
实出现栈链 就表是需从要栈两顶个删in步除t骤一s,个_首元e先素m定,p义原t链栈y表顶(v结元o构素id,的)其后;次继/在元/程素测序自试中动动成栈态为地新空生的成栈结顶点。,并与前一个结点链接。
matrix operator *(matrix &m);//矩阵乘法
void set(int x); 遍历即显示一棵树的所有结点,有前序、中序和后序等3种方式。
public:
private: list(void);
栈中元素的数量达到上限称为栈满,栈中没有元素称为栈空。
int data; public:
11.4 二叉树类
理论上可以把二叉树理解为一种特殊的 树,它由根和两个不相交的左子树、右 子树组成,其中左子树和右子树也是二 叉树。
二叉树的特点是,每个结点最多只有两 棵子树。
二叉树操作
二叉树的基本操作有建立、添加结点、删除结点、 查询结点、遍历、清空整棵树等。
遍历即显示一棵树的所有结点,有前序、中序和 后序等3种方式。前序遍历是先访问树的根结点, 再访问左子树,最后访问右子树;中序遍历是先 访问左子树,再访问树的根结点,最后访问右子 树;后序遍历是先访问左子树,再访问右子树, 最后访问树的根结点。
栈pri是va只te:允许在表in的t一s端_进fu行ll插(v入o和id删)除; 等/操/测作的试线栈性表满,栈允许操作的一端称为栈顶,另一端称为栈底。
private:
T s[MAX];
//栈空间
int top;
//栈顶
};
11.2 矩阵类
一般用二维数组存储和表示矩阵,这种 方式必须事先指定矩阵行和列的长度。
node类
private:
class node
{ matrix operator -(matrix &m);//矩阵减法
顺序存储用一维数组的形式实现,而链式存储用链表的形式实现。
tree(void); private:
friend class tree;
public: int data;
public:
{ 顺序存储用一维数组的形式实现,而链式存储用链表的形式实现。
T s[MAX];
//栈空间
public: node *root;
void push(T x); //入栈
T pop(void); s/t/出ac栈k(void); ~stack(); void del(const char*);//删除结点
相关文档
最新文档