目录

对称矩阵

定义

定义

基本术语

二叉树

二叉树的五中基本形态

两类特殊的二叉树

满二叉树

完全二叉树

二叉树的存储结构

顺序存储

二叉链表存储

三叉链表存储

二叉树的基本操作

1.建立一棵空二叉树

2.生成一棵二叉树

3.二叉树中插入一个左子树结点

4.二叉树中插入一个右子树结点

5.删除结点parent的左子树

6.删除结点parent的右子树

二叉树的遍历

DLR(根左右 称为先序遍历)

LDR(左根右 称为中序遍历)

LRD(左右根 称为后序遍历)

线索二叉树

先序线索二叉树

中序线索二叉树

后序线索二叉树

树和森林的存储

双亲存储法

孩子链表存储法

双亲孩子存储法

左孩子右兄弟存储法

二叉树、树和森林的转换

森林转换为二叉树(使用左孩子右兄弟的方法)

二叉树转换为树和森林

最优二叉树(哈夫曼树)

定义

哈夫曼树的建立过程

哈夫曼编码


对称矩阵

定义

1.对称矩阵中的元素关于主对角线对称,aij=aji,元素个数n^2

2.压缩存储,元素个数n(n+1)/2

//以下C语言函数的功能是将一维数组a中压缩存储的下三角4×4阶对称矩阵按矩阵格式输出。
print(int a[])
{ int i,j;for(i=0;i<4;i++){ for(j=0;j<4;j++){if(i>=j) printf("%4d",a[i*(i+1)/2+j]);else printf("%4d",a[j*(j+1)/2+i]);}printf("\n");}
}

定义

1.树(Tree)是n(n≥0)个有限数据元素的集合

2.n=0时,树为空树

3.树的根结点没有前驱结点,除根结点之外的所有结有且只有一个前驱结点

基本术语

1.结点:表示树中的元素

2.结点的度:结点子树的个数(该结点的子结点个数)

3.叶结点:度为0的结点(没有子结点)

4.分枝结点:度不为0的结点

5.树的度:各结点度的最大值

6.子结点(孩子结点)

7.父结点(双亲结点)

8.兄弟结点

9.结点的祖先:从根到该结点所经分支上的所有结点

10.子孙:以某结点为根的子树中的任一结点都称为该结点的子孙

11.结点的层数:从该结点到树的根结点的层数

12.堂兄弟结点:父结点在同一层且双亲结点不相同的结点互为堂兄弟结点

13.树的度(高度或深度):树中所有结点的最大层数称为树的度

14.路径、路径长度:结点的层数-1

15.有序树和无序树

16.森林:任何一棵树,删去根结点就变成了森林

二叉树

二叉树的五中基本形态

两类特殊的二叉树

满二叉树

结点个数:2^k-1

完全二叉树

二叉树的存储结构

顺序存储

二叉链表存储

三叉链表存储

二叉树的基本操作

1.建立一棵空二叉树

//初始化建立二叉树bt的头结点,0表示建立失败,1表示成功
int Initiate (BiTree bt)
{ if((bt=(BiTNode *)malloc(sizeof(BiTNode)))==NULL) return 0;bt->lchild=NULL;bt->rchild=NULL;return 1;
}

2.生成一棵二叉树

//生成一棵以x为根结点的数据域信息的二叉树
BiTree Create(elemtype x)
{ BiTree p;if ((p=(BiTNode *)malloc(sizeof(BiTNode)))==NULL) return NULL;p->data=x;p->lchild=NULL;p->rchild=NULL;return p;
}

3.二叉树中插入一个左子树结点

//在二叉树bt的结点parent的左子树中插入结点数据元素x
BiTree InsertL(BiTree bt,elemtype x,BiTree parent)
{ BiTree p;if (parent==NULL) { printf(“\n插入出错”);return NULL;}if ((p=(BiTNode *)malloc(sizeof(BiTNode)))==NULL) return NULL;p->data=x;p->lchild=NULL;p->rchild=NULL;if (parent->lchild==NULL)parent->lchild=p;else { p->lchild=parent->lchild;parent->lchild=p; }return bt;
}

4.二叉树中插入一个右子树结点

//在二叉树bt的结点parent的右子树中插入结点数据元素x
BiTree InsertR(BiTree bt,elemtype x,BiTree parent)
{ BiTree p;if (parent==NULL) { printf(“\n插入出错”);return NULL;}if ((p=(BiTNode *)malloc(sizeof(BiTNode)))==NULL) return NULL;p->data=x;p->lchild=NULL;p->rchild=NULL;if (parent->rchild==NULL)parent->rchild=p;else { p->rchild=parent->rchild;parent->rchild=p; }return bt;
}

5.删除结点parent的左子树

//在二叉树bt中删除结点parent的左子树
BiTree DeleteL(BiTree bt,BiTree parent)
{ BiTree p;if (parent==NULL||parent->lchild==NULL){ printf("\n删除出错");return NULL;}p=parent->lchild;parent->lchild=NULL;free(p);//当p为非叶结点时,这样删除仅释放了所删子树根结点的空间return br;//若要删除子树分支中的结点,需用后面介绍的遍历操作来实现
}

6.删除结点parent的右子树

//在二叉树bt中删除结点parent的右子树
BiTree DeleteL(BiTree bt,BiTree parent)
{ BiTree p;if (parent==NULL||parent->rchild==NULL){ printf("\n删除出错");return NULL;}p=parent->rchild;parent->rchild=NULL;free(p);//当p为非叶结点时,这样删除仅释放了所删子树根结点的空间return br;//若要删除子树分支中的结点,需用后面介绍的遍历操作来实现
}

二叉树的遍历

DLR(根左右 称为先序遍历)

int PreOrder(BiTree bt)
{ if (bt==NULL) //递归调用结束条件return0; Visit(bt->data);//访问结点的数据域PreOrder(bt->lchild);//先序递归遍历bt左子树PreOrder(bt->rchild);//先序递归遍历bt右子树return 1;
}

LDR(左根右 称为中序遍历)

int MidOrder(BiTree bt)
{ if (bt==NULL) //递归调用结束条件return0; MidOrder(bt->lchild);//中序递归遍历bt左子树Visit(bt->data);//访问结点的数据域MidOrder(bt->rchild);//中序递归遍历bt右子树return 1;
}

LRD(左右根 称为后序遍历)

int PostOrder(BiTree bt)
{ if (bt==NULL) //递归调用结束条件return0; PostOrder(bt->lchild);//后序递归遍历bt左子树PostOrder(bt->rchild);//后序递归遍历bt右子树Visit(bt->data);//访问结点的数据域return 1;
}

线索二叉树

1.当结点有左子树,即lchild域不为空时,LTag为0

2.当结点没有左子树,即lchild为空时,令lchild域指向该结点的前驱,LTag为1

3.当结点有右子树,即rchild域不为空时,RTag为0

3.当结点没有右子树,即rchild为空时,令rchild域指向该结点的后继,RTag为1

先序线索二叉树

abdce

中序线索二叉树

bdaec

后序线索二叉树

dbeca

树和森林的存储

双亲存储法

孩子链表存储法

双亲孩子存储法

左孩子右兄弟存储法

二叉树、树和森林的转换

森林转换为二叉树(使用左孩子右兄弟的方法)

二叉树转换为树和森林

最优二叉树(哈夫曼树)

定义

1.指对于一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树

2.结点的路径长度:从根结点到该结点的路径上分支的数目

3.结点权值:附加在结点上的信息

4.结点带权路径:结点上权值与该结点到根之间的路径长度的乘积

5.二叉树的路径长度:指由根结点到所有叶结点的路径长度之和

6.二叉树的带权路径长度:WPL(T) =Σwklk (权重为wk,路径为lk)

WPL(T)=1×2 +8×2 +5×3+7×4+2×2=65

哈夫曼树的建立过程

每次选两个最小的权构造哈夫曼树

哈夫曼编码

左分支代表0,右分支代表1

{5,2,10,6,7}   每次选两个最小的权构造哈夫曼树

数据结构概述3 对称矩阵、树和二叉树相关推荐

  1. 《数据结构与算法》——树与二叉树之遍历总结

    <数据结构与算法>--树与二叉树之遍历总结 树与二叉树部分计划分为三次进行复习总结,第一次为基本概念和二叉树的遍历,第二次内容为线索二叉树以及树和森林,第三次为树与二叉树的应用. 目录 & ...

  2. 数据结构——非线性结构(树与二叉树)

    文章目录 一. 非线性结构的概述 二. 树的基本概念 1. 树的定义 2. 专业术语 3. 树的性质 三. 树的分类 1. 一般树 2. 二叉树(是有序树) 2.1 概念 2.2 分类 1. 一般二叉 ...

  3. 数据结构C#版笔记--树与二叉树

    图1 上图描述的数据结构就是"树",其中最上面那个圈圈A称之为根节点(root),其它圈圈称为节点(node),当然root可以认为是node的特例. 树跟之前学习过的线性结构不同 ...

  4. 王道408数据结构——第五章 树与二叉树

    文章目录 一.树的基本概念 树的性质 二.二叉树 满二叉树 完全二叉树 二叉排序树 平衡二叉树 二叉树的性质 完全二叉树的性质 三.二叉树的储存结构 顺序储存 链式存储 四.树的储存方式 双亲表示法 ...

  5. 数据结构学习笔记(树、二叉树)

    树(一对多的数据结构) 树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树种: (1)有且仅有一个特定的称为根(Root)的结点: (2)当n>1时,其余结点 ...

  6. 王道数据结构课代表 - 考研数据结构 第五章 树和二叉树 究极精华总结笔记

    本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对数据结构知识点的理解的总结.希望对新一届的计算机考研人提供帮助!!!   关于对 树和二叉树 章节知识点总结的十分全面,涵括了<王道 ...

  7. 【Python数据结构系列】☀️《树与二叉树-基础知识》——知识点讲解+代码实现☀️

    文章目录 数据结构之树和二叉树 第一部分 树和二叉树的基础知识 1.树和二叉树的定义 1.1 树的定义 1.2 树的基本术语 1.3 二叉树的定义 2.二叉树的性质和存储结构 2.1 二叉树的性质 2 ...

  8. 数据结构 第5章 树和二叉树 课后答案

    第5章  树和二叉树 1.选择题 (1)把一棵树转换为二叉树后,这棵二叉树的形态是(   ). A.唯一的                          B.有多种 C.有多种,但根结点都没有左孩 ...

  9. 2021-08-30王道 数据结构 第5章 树与二叉树 p185 第10题

    第5章 树与二叉树 5.5 树与二叉树的运用 综合应用题 第10题 void Output(BSTANode *bt,keyType k) {if(bt==NULL)return;if(bt-> ...

最新文章

  1. Luogu P1082 同余方程(NOIP 2012) 题解报告
  2. python怎么查找代码位置查询_Python查询IP地址归属完整代码
  3. 是把计算机分析和恢复力实测,土木工程测试试题.docx
  4. XP 组件中没有IIS,如何添加IIS组件
  5. java bip-39_bip39
  6. 李开复悔过:把运营微博当人生,把获取粉丝当游戏
  7. python PyQt5中文教程☞【第八节】PyQt5控件(II)
  8. 【机器学习基础】(六):通俗易懂无监督学习K-Means聚类算法及代码实践
  9. 2017计算机考研统考大纲,2017年考研计算机大纲详解(六):计算机网络
  10. Go的slice扩容机制
  11. 穷举 迭代 while
  12. 如何通过序列化在网络间传递对象,网络协议:轻松定义自己的网络通讯协议
  13. android微信支付回调方法,Android接入支付宝和微信支付的方法
  14. c++ 将引用赋值给引用_5分钟掌握 Python 对象的引用
  15. byte数组转为string 去掉转义符_三道简单的 String 面试题干趴下了 n 多大牛!
  16. 有机食品农产品电商网站HTML模板
  17. wps下一步快捷键_WPS快捷键大全
  18. 初入steam避坑请进
  19. Serializable与serialVersionUID的作用
  20. vue使用姓名做默认头像 vue-avatar

热门文章

  1. matlab 动态图只能显示等平面吗,matlab平面浓度图
  2. Java写入txt文件内容
  3. es6删除数组某一项_JavaScript:集合与数组,重要但你不知道的ES6数据类型
  4. vue插槽的理解 slot slot-scop,三种插槽方式,默认插槽,具名插槽,作用域插槽
  5. MySQL SUM()函数按条件求和
  6. ubuntu18.04添加网络共享文件夹
  7. TimeUnit简析
  8. sql如何求连续打卡
  9. 【论文】如何记论文笔记
  10. Viterbi-Algorithm(维特比)算法