数据结构 学习笔记(四):树(上):树的表示,二分查找,二叉树,先中后层次遍历
来源:互联网 发布:un服务贸易数据库 编辑:程序博客网 时间:2024/06/05 12:03
前言
请跟着上一讲http://blog.csdn.net/jurbo/article/details/52595821继续学习
3.1 树与树的表示
3.1.1 引子(顺序查找)
什么是树
客观世界中许多事物存在层次关系
- 人类社会家谱
- 社会组织结构
- 图书信息管理
分层次组织在管理上具有更高的效率!
数据管理的基本操作之一:查找
如何实现有效率的查找?
查找
查找:根据某个给定关键字K,从集合R中找出关键字与K相同的记录
静态查找:集合中记录是固定的(查字典)
- 没有插入和删除操作,只有查找
动态查找:集合中记录是动态变化的
- 除查找,还可能发生插入和删除
静态查找
方法1:顺序查找
顺序查找的一种实现(无“哨兵”)
3.1.2 引子(二分查找例子)
方法2:二分查找
【例】假设有13个数据元素,按关键字由小到大顺序存放。二分查找关键字为444的数据元素过程如下:
【例】仍然以上面13个数据元素构成的有序线性表为例。二分查找关键字为43的数据元素如下:
3.1.3 引子(二分查找实现)
二分查找算法
int BinarySearch(List Tbl,ElementType K){ //在表Tbl中查找关键字为K的数据元素 int left,right,mid,NoFound=-1; left=1; right=Tbl->Length; while(left<=right) { mid=(left+right)/2; if(K<Tbl->Element[mid]) right=mid-1; //调整右边界 else if(K->Tbl->Element[mid]) left=mid+1; //调整左边界 else return mid; //查找成功,返回数据元素的下标 } return NotFound;}
11个元素的二分查找判定树
3.1.4 树的定义和术语
树的定义
树:n(n>=0)个结点构成的有限集合。
当n=0时,称为空树。
对于任一颗非空树(n>0),它具备以下性质:
树与非树?
树的一些基本术语
3.1.5 树的表示
儿子-兄弟表示法
3.2 二叉树及存储结构
3.2.1 二叉树的定义及性质
二叉树的定义
二叉树T:一个有穷的结点集合,这个集合可以为空,若不为空,则它是由根结点和称为其左子树和右子树的两个不相交的二叉树组成。
特殊二叉树
二叉树几个重要性质
二叉树的抽象数据类型定义
3.2.2 二叉树的存储结构
顺序存储结构
链表存储
3.3 二叉树的遍历
3.3.1 先序中序后序遍历
先序遍历
遍历过程
- 访问根结点
- 先序遍历其左子树
- 先序遍历其右子树
中序遍历
遍历过程
- 中序遍历其左子树
- 访问根结点
- 中序遍历其右子树
后序遍历
遍历过程
- 后序遍历其左子树
- 后序遍历其右子树
- 访问根结点
3.3.2 中序非递归实现
二叉树的非递归遍历
中序遍历非递归遍历算法
3.3.3 层次遍历
二叉树遍历的核心问题:二维结构的线性化
- 从结点访问其左,右儿子结点
- 访问左儿子后,右儿子结点怎么办?
需要一个存储结构保存暂时不访问的结点
存储结构:堆栈、队列
队列实现
遍历从根结点开始,首先将根节点入队,然后开始执行循环:结点出队、访问该结点、其左右儿子入队
3.3.4 遍历应用例子
遍历二叉树应用:输出二叉树中的叶子结点
在二叉树的遍历算法中增加检测结点的“左右子树是否都为空”
求二叉树的高度
二元运算表达式树及其遍历
由两种遍历序列确定二叉树
答案是:必须要有中序遍历才行
先序和中序遍历序列来确定一颗二叉树
0 0
- 数据结构 学习笔记(四):树(上):树的表示,二分查找,二叉树,先中后层次遍历
- 数据结构学习笔记(8)---二叉树的层次遍历
- 数据结构学习笔记(四)---遍历二叉树
- 数据结构--二叉树--层次遍历二叉树(顺序遍历)
- 数据结构学习(四)二叉树的遍历
- 数据结构BinaryTree实例(四):二叉树遍历总结(前中后,层次遍历)
- 【数据结构】二叉树的层次遍历
- 【数据结构】二叉树的层次遍历2
- 数据结构-层次遍历二叉树
- 数据结构:题目(4)遍历二叉树的四种方法: 依次是:层次、前序、中序、后序
- 2015年大二上-数据结构-树和二叉树-2-(1)二叉树的层次遍历
- 二叉树的层次遍历(打印)
- 数据结构—树和二叉树-2.二叉树的层次遍历(BFS)
- 数据结构--二叉树--层次遍历二叉树(链式遍历--队列)
- 数据结构实验之求二叉树后序遍历和层次遍历(根据前序中序还原二叉树)
- 数据结构二叉树的查找与遍历
- C++数据结构--按层次遍历二叉树
- 数据结构 — 5.二叉树层次遍历
- 动软代码生成DBUtility的引用
- Newtonsoft.Json时间转换
- 安卓学习笔记---聊一聊Android 6.0的运行时权限
- 【第三周 项目1-顺序表的基本运算】
- 动态规划之背包问题(一)
- 数据结构 学习笔记(四):树(上):树的表示,二分查找,二叉树,先中后层次遍历
- 根据日期获取当月第一天和当月最后一天
- 盗号者你好,我有一些事情不得不可你说
- 注册广播接收者两种方式的区别,及优缺点
- 第三周 项目四 -顺序表应用
- 【Pomelo源码分析】2016-09-20 入门(pomelo命令)
- Android 自定义进度图形
- 带你吃透RTMP
- 利用 Android Systrace 做performance 分析