收藏 分享(赏)

数据结构(Java版)---叶核亚--课件--11章全.ppt

上传人:微传9988 文档编号:3437039 上传时间:2018-10-29 格式:PPT 页数:224 大小:6.44MB
下载 相关 举报
数据结构(Java版)---叶核亚--课件--11章全.ppt_第1页
第1页 / 共224页
数据结构(Java版)---叶核亚--课件--11章全.ppt_第2页
第2页 / 共224页
数据结构(Java版)---叶核亚--课件--11章全.ppt_第3页
第3页 / 共224页
数据结构(Java版)---叶核亚--课件--11章全.ppt_第4页
第4页 / 共224页
数据结构(Java版)---叶核亚--课件--11章全.ppt_第5页
第5页 / 共224页
点击查看更多>>
资源描述

1、叶核亚,数据结构(Java版) (第2版),数据结构(Java版)(第2版),第0章 Java程序设计基础 第1章 绪论 第2章 线性表 第3章 栈与队列 第4章 串 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查找 第9章 排序 第10章 综合应用设计 第11章 Java开发运行环境,第1章 绪论,1.1 数据结构的基本概念 1.2 算法 目的:勾勒数据结构课程的轮廓。 要求:掌握数据结构基本概念,理解抽象数 据类型概念;熟悉算法设计和分析方 法。 重点:数据的逻辑结构和存储结构。 难点:抽象数据类型,算法分析。,数据结构(Java版)(第2版),1.1 数据结构的基本概念

2、,1.1.1 为什么要学习数据结构 1.1.2 什么是数据结构 1.1.3 数据的逻辑结构 1.1.4 数据的存储结构 1.1.5 数据操作 1.1.6 用Java语言描述数据结构,数据结构(Java版)(第2版),1.1.1 为什么要学习数据结构,软件设计是计算机学科各个领域的核心。软件设计时要考虑的首要问题是数据的表示、组织和处理方法。数据结构设计和算法设计是软件系统设计的核心。 “数据结构十算法=程序”。,数据结构(Java版)(第2版),1.1.2 什么是数据结构,数据、数据元素、数据项 数据类型(data type)是指一个类型和定义在这个类型上的操作集合。 数据结构(data st

3、ructure)指数据元素之间存在的关系。 抽象数据类型(Abstract Data Type,ADT)是指一个逻辑概念上的类型和这个类型上的操作集合。,数据结构(Java版)(第2版),1.1.3 数据的逻辑结构,线性结构:数据元素只有一个前驱数据元素和一个后继数据元素。 树结构:每个数据元素只有一个前驱数据元素,可有零个或若干个后继数据元素。 图结构:每个数据元素可有零个或若干个前驱数据元素,零个或若干个后继数据元素。,数据结构(Java版)(第2版),1.线性结构,表1.1 学生信息表,数据结构(Java版)(第2版),2.树结构,数据结构(Java版)(第2版),3.图结构,图1.3

4、南京飞往昆明的航班路线图,数据结构(Java版)(第2版),1.1.4 数据的存储结构,顺序存储结构 链式存储结构,图1.4 线性表(A,B,C,D)的两种存储结构,数据结构(Java版)(第2版),1.1.5 数据的操作,初始化。 判断是否空状态。 求长度:统计元素个数。 包含:判断是否包含指定元素。 遍历:按某种次序访问所有元素,每个元素只被访问一次。 取值:获取指定元素值。 置值:设置指定元素值。 插入:增加指定元素。 删除:移去指定元素。,数据结构(Java版)(第2版),1.1.6 用Java语言描述数据结构,public interface Structure /E是泛型参数,指定

5、元素类型boolean isEmpty(); /判断是否为空int length(); /返回元素个数boolean contain(Object obj); /判断是否包含obj对象boolean add(E element); /插入元素boolean remove(Object obj); /移去首次出现的obj对象void clear(); /清空 ,数据结构(Java版)(第2版),1.2 算法,1.2.1 什么是算法 1.2.2 算法分析 1.2.3 算法设计实例 1.2.4 递归算法,数据结构(Java版)(第2版),1.2.1 什么是算法,算法定义 有穷性 确定性 输入 输出

6、可行性 算法与数据结构,算法设计目标 正确性 可读性 健壮性 高时间效率 高空间效率 算法描述,数据结构(Java版)(第2版),图1.6 线性表插入操作,数据结构(Java版)(第2版),1.2.2 算法分析,度量算法的时间效率 算法的时间效率指算法的执行时间随问题规模的增长而增长的趋势,通常采用时间复杂度来度量算法的时间效率。 T(n)=O(f(n) 度量算法的空间效率 空间复杂度指算法在执行时为解决问题所需要的额外内存空间,不包括输入数据所占用的存储空间。 S(n)=O(f(n),数据结构(Java版)(第2版),表1.2 时间复杂度随n变化情况的比较,数据结构(Java版)(第2版),

7、一个简单语句的时间复杂度为O(1)。 int count=0; 一个循环的时间复杂度为O(n)。 int n=8, count=0; for (int i=1; i=n; i+)count+; 时间复杂度为O(log2 n)的循环语句。 int n=8, count=0; for (int i=1; i=n; i*=2)count+; 时间复杂度为O(n2)的二重循环。 int n=8, count=0; for (int i=1; i=n; i+) for (int j=1; j=n; j+)count+;,【例1.1】 算法时间复杂度分析。,数据结构(Java版)(第2版),时间复杂度为O

8、(nlog2n)的二重循环。 int n=8, count=0; for (int i=1; i=n; i*=2)for (int j=1; j=n; j+)count+;循环次数为 。时间复杂度为O(nlog2n)。时间复杂度为O(n)的二重循环。 int n=8, count=0; for (int i=1; i=n; i*=2)for (int j=1; j=i; j+)count+; 总的循环次数为 。时间复杂度为O(n)。,数据结构(Java版)(第2版),1.2.3 算法设计实例,【例1.2】 交换两个变量值。 【例1.3】 数组的顺序查找,以及对象比较相等方法。 【例1.4】 已

9、排序数组的顺序查找,以及对象比较大小方法。,数据结构(Java版)(第2版),递归定义递归算法 f(n)=nf(n-1),1.2.4 递归算法,数据结构(Java版)(第2版),【例1.5】 求n!。,数据结构(Java版)(第2版),【例1.6】 求Fibonacci序列。,数据结构(Java版)(第2版),数据结构(Java版)(第2版),第0章 Java程序设计基础 第1章 绪论 第2章 线性表 第3章 栈与队列 第4章 串 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查找 第9章 排序 第10章 综合应用设计 第11章 Java开发运行环境,第2章 线性表,2.1 线

10、性表的抽象数据类型 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 目的:实现线性表抽象数据类型。 要求:掌握两种存储结构实现线性表。 重点:顺序表类,单链表类。 难点:单链表,双链表。,数据结构(Java版)(第2版),2.1 线性表的抽象数据类型,LinearList=(a0,a1,an1) public interface LList /线性表接口 boolean isEmpty(); /判断线性表是否为空int length(); /返回线性表长度E get(int index); /返回序号为index的对象E set(int index, E element); /

11、设置序号为index对象为boolean add(int index, E element);/插入element对象,插入后对象序号为indexboolean add(E element); /插入element对象,插入位置没有约定E remove(int index); /移去序号为index的对象,返回被移去对象void clear(); /清空线性表 ,数据结构(Java版)(第2版),2.2 线性表的顺序表示和实现,线性表的顺序存储结构,数据结构(Java版)(第2版),2. 顺序表的插入和删除操作,数据结构(Java版)(第2版),public class SeqList imp

12、lements LList /顺序表类,实现线性表接口private Object table; /对象数组,私有成员private int n; /顺序表长度 顺序表操作的效率分析如果在各位置插入元素的概率相同,则有,3. 顺序表类,数据结构(Java版)(第2版),【例2.1】 使用顺序表类求解约瑟夫环问题。,数据结构(Java版)(第2版),2.3 线性表的链式表示和实现,2.3.1 线性表的链式存储结构 2.3.2 单链表 2.3.3 双链表,数据结构(Java版)(第2版),2.3.1 线性表的链式存储结构,数据结构(Java版)(第2版),单链表结点类 public class N

13、ode /单链表结点类public E data; /数据域,保存数据元素public Node next; /地址域,引用后继结点 Node p,q; p=new Node(“A“); q=new Node(“B“); p.next=q;,2.3.2 单链表,数据结构(Java版)(第2版),2. 单链表的遍历操作,Node p = head; while (p!=null) 访问p结点;p = p.next; ,数据结构(Java版)(第2版),3. 单链表的插入操作,数据结构(Java版)(第2版),4. 单链表的删除操作,头删除 head = head.next; 中间/尾删除 if

14、(p.next!=null)p.next = p.next.next;,数据结构(Java版)(第2版),5. 单链表类,public class SinglyLinkedList implements LList /单链表类,实现线性表接口protected Node head; /头指针public SinglyLinkedList() /构造空单链表this.head = null; 单链表操作的效率分析,数据结构(Java版)(第2版),【例2.2】 采用单链表求解约瑟夫环问题。,数据结构(Java版)(第2版),7. 单链表是递归结构,public String toString()

15、 return “(“ + this.toString(this.head) + “)“; public String toString(Node p) /递归算法if (p!=null)return p.data.toString() + “, “+ this.toString(p.next); return “; ,数据结构(Java版)(第2版),【例2.3】 单链表逆转。,数据结构(Java版)(第2版),8. 带头结点的单链表,【例2.4】 建立排序的单链表。,数据结构(Java版)(第2版),9. 循环单链表,数据结构(Java版)(第2版),2.3.3 双链表,双链表结构p =

16、p.next.prev = p.prev.next,数据结构(Java版)(第2版),2.双链表的插入和删除操作,(1) 插入q = new DLinkNode(x); q.prev = p.prev; q.next = p; p.prev.next = q; p.prev = q;,数据结构(Java版)(第2版),(2)删除,p.prev.next = p.next; if (p.next!=null)(p.next).prev = p.prev;,数据结构(Java版)(第2版),3. 循环双链表,数据结构(Java版)(第2版),4. 双链表类,public class DLinkNo

17、de /双链表结点类public E data; /数据元素public DLinkNode prev, next; /前驱、后继结点 public class CHDoublyLinkedList /带头结点的循环双链表类protected DLinkNode head; /头指针 ,数据结构(Java版)(第2版),*2.4 迭代器,2.4.1 迭代接口 2.4.2 基于迭代器的操作 2.4.3 提供迭代器对象,数据结构(Java版)(第2版),2.4.1 迭代接口,java.util.Iterator迭代器接口 public interface Iterator boolean hasN

18、ext(); /判断是否有后继元素E next(); /返回后继元素void remove(); /删除迭代器对象表示的集合元素 java.lang.Iterable可迭代接口 public interface Iterable Iterator iterator();/返回一个实现java.util.Iterator迭代器接口的对象 ,数据结构(Java版)(第2版),2.4.2 基于迭代器的操作,public abstract class AbstractList implements Iterable public abstract Iterator iterator(); /获得迭代器

19、对象public String toString() Iterator it = iterator(); /it是一个迭代器对象String str=“(“;while (it.hasNext() /若有后继元素E element = it.next(); /获得后继元素 str += element.toString();if (it.hasNext()str += “, “; return str+“)“;public boolean contain(Object obj) ,数据结构(Java版)(第2版),2.4.3 提供迭代器对象,顺序表类提供迭代器对象 public class S

20、eqList extends AbstractList implements LList public Iterator iterator() return new Itr(); /返回一个迭代器对象private class Itr implements Iterator /私有内部类,实现迭代器接口 ,数据结构(Java版)(第2版),2. 单链表类提供迭代器对象,public class SinglyLinkedList extends AbstractList implements LList public Iterator iterator() return new Itr(); /

21、返回一个迭代器对象private class Itr implements Iterator /私有内部类,实现迭代器接口 ,数据结构(Java版)(第2版),数据结构(Java版)(第2版),第0章 Java程序设计基础 第1章 绪论 第2章 线性表 第3章 栈与队列 第4章 串 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查找 第9章 排序 第10章 综合应用设计 第11章 Java开发运行环境,第3章 栈和队列,3.1 栈 3.2 队列 目的:使用栈或队列求解应用问题。 要求:掌握栈和队列抽象数据类型,以及顺 序和链式存储结构实现;理解对于怎 样的应用问题,需要使用栈或

22、队列, 以及怎样使用。 重点:栈和队列的设计和应用。 难点:栈或队列的使用场合,以及如何使用 栈和队列求解应用问题。,数据结构(Java版)(第2版),3.1 栈,3.1.1 栈抽象数据类型 3.1.2 顺序栈 3.1.3 链式栈 3.1.4 栈的应用,数据结构(Java版)(第2版),3.1.1 栈抽象数据类型,栈(stack)是一种特殊的线性表, 其插入和删除操作只允许在线性表的一端进行。 public interface SStack boolean isEmpty(); /判断是否空栈boolean push(E element); /入栈E pop(); /出栈E get(); /取

23、栈顶元素值 ,数据结构(Java版)(第2版),3.1.2 顺序栈,public class SeqStack implements SStack private Object value ; private int top; /栈顶元素下标 ,数据结构(Java版)(第2版),3.1.3 链式栈,public class LinkedStackimplements SStack private Node top; ,数据结构(Java版)(第2版),3.1.4 栈的应用,栈是嵌套调用机制的实现基础 使用栈以非递归方式实现递归算法,数据结构(Java版)(第2版),例3.1 判断表达式中圆括号

24、是否匹配,数据结构(Java版)(第2版),例3.2 使用栈计算表达式的值。,中缀表达式1+2*(3-4)+5,数据结构(Java版)(第2版),1.将中缀表达式转换为后缀表达式,数据结构(Java版)(第2版),2.后缀表达式求值,数据结构(Java版)(第2版),3.2 队列,3.2.1 队列抽象数据类型 3.2.2 顺序队列 3.2.3 链式队列 3.2.4 队列的应用,数据结构(Java版)(第2版),3.2.1 队列抽象数据类型,队列(queue)是一种特殊的线性表,其插入和删除操作分别在线性表的两端进行。 public interface QQueue /队列接口boolean i

25、sEmpty(); /判断队列是否为空boolean enqueue(E element); /入队E dequeue(); /出队 ,数据结构(Java版)(第2版),3.2.2 顺序队列,顺序队列,假溢出,数据结构(Java版)(第2版),2.顺序循环队列,front=(front+1) % length; rear=(rear+1) % length;,数据结构(Java版)(第2版),3.顺序循环队列类,public class SeqQueue implements QQueue private Object value; private int front,rear; /队列头尾下

26、标 ,数据结构(Java版)(第2版),3.2.3 链式队列,public class LinkedQueue implements QQueue /链式队列类private Node front, rear; ,数据结构(Java版)(第2版),3.2.4 队列的应用,例3.3 求解素数环问题。,数据结构(Java版)(第2版),实验3 栈和队列及其应用,走迷宫 骑士游历,数据结构(Java版)(第2版),数据结构(Java版)(第2版),第0章 Java程序设计基础 第1章 绪论 第2章 线性表 第3章 栈与队列 第4章 串 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查

27、找 第9章 排序 第10章 综合应用设计 第11章 Java开发运行环境,第4章 串,4.1 串抽象数据类型 4.2 串的表示和实现 4.3 串的模式匹配目的:串作为特殊线性表的实现与应用。 要求:掌握串的操作特点和实现方法,掌 握两种串的模式匹配算法。 重点:串的各种操作实现,两种串的模式 匹配算法。 难点:KMP模式匹配算法。,数据结构(Java版)(第2版),4.1 串抽象数据类型,4.1.1 串的基本概念 串定义、子串、串比较 4.1.2 串抽象数据类型 public interface SString int length(); /返回串的长度char charAt(int inde

28、x); /返回串中序号为index的字符SString concat(SString str); /当前串与str串连接生成新串SString substring(int begin, int end);/返回串中字符序号从begin至end-1的子串int indexOf(SString pattern);/返回pattern串在主串中的第一次匹配位置 ,数据结构(Java版)(第2版),4.2 串的表示和实现,4.2.1 串的存储结构 4.2.2 字符串类String 4.2.3 字符串类StringBuffer,数据结构(Java版)(第2版),4.2.1 串的存储结构,串的顺序存储结构

29、串的链式存储结构,数据结构(Java版)(第2版),4.2.2 字符串类String 1.常量串的基本操作,图4.3 连接两个串常量 【例4.1】 String类的模拟实现。 public final class String1 private final char value; ,数据结构(Java版)(第2版),【例4.2】 判断标识符。,数据结构(Java版)(第2版),2. String串的插入、删除操作,【例4.3】 使用String实现字符串的插入、删除操作。,数据结构(Java版)(第2版),4.2.3 字符串类StringBuffer,插入串删除子串,数据结构(Java版)(第

30、2版),【例4.4】 StringBuffer类的模拟实现。,public final class StringBuffer1 private char value; /字符数组private int n; /串的长度 【例4.5】 串的逆转。,数据结构(Java版)(第2版),4.3 串的模式匹配,4.3.1 朴素的模式匹配(Brute-Force)算法 4.3.2 无回溯的模式匹配(KMP)算法,数据结构(Java版)(第2版),4.3.1 朴素的模式匹配(Brute-Force)算法,数据结构(Java版)(第2版),【例4.7】 串的替换操作。,数据结构(Java版)(第2版),Bru

31、te-Force算法分析,数据结构(Java版)(第2版),目标串不必回溯,数据结构(Java版)(第2版),4.3.2 无回溯的模式匹配(KMP)算法,KMP算法描述,数据结构(Java版)(第2版),2.求next数组,表4.1 模式串“abcabc“的next数组,KMP算法实现 计算next数组的算法,数据结构(Java版)(第2版),5.改进next数组,数据结构(Java版)(第2版),5.改进next数组,表4.2 模式串“abcabc“改进的next数组,数据结构(Java版)(第2版),6.KMP算法分析,数据结构(Java版)(第2版),数据结构(Java版)(第2版),第

32、0章 Java程序设计基础 第1章 绪论 第2章 线性表 第3章 栈与队列 第4章 串 第5章 数组和广义表 第6章 树和二叉树 第7章 图 第8章 查找 第9章 排序 第10章 综合应用设计 第11章 Java开发运行环境,第5章 数组和广义表,5.1 数组 5.2 特殊矩阵的压缩存储 5.3 广义表 目的:了解包含子结构的线性结构。 要求:理解多维数组的存储结构,了解 特殊矩阵压缩存储,了解广义表。 重点: 难点:广义表的表示和实现。,数据结构(Java版)(第2版),5.1 数组,5.1.1 一维数组 Loc(ai)= Loc(a0)i c 5.1.2 二维数组,数据结构(Java版)(

33、第2版),【例5.1】 矩阵类。,矩阵运算主要有矩阵加、矩阵减、矩阵乘、矩阵转置等。矩阵加(C=A+B)定义为 public class Matrix private int value; ,数据结构(Java版)(第2版),5.2 特殊矩阵的压缩存储,5.2.1 对称(三角)矩阵的存储 5.2.2 稀疏矩阵的压缩存储,数据结构(Java版)(第2版),5.2.1 对称(三角)矩阵的存储,三角矩阵 对称矩阵,数据结构(Java版)(第2版),5.2.2 稀疏矩阵的压缩存储,表示稀疏矩阵的三元组 (0,2,11),(0,4,17),(1,1,20),(3,0,19),(3,5,28),(4,4,

34、50)例5.2 稀疏矩阵 的三元组顺序表实现。,数据结构(Java版)(第2版),三元组链表,三元组单链表 行/列的单链表,数据结构(Java版)(第2版), 十字链表,数据结构(Java版)(第2版),5.3 广义表,5.3.1 广义表抽象数据类型 GList = (a0, a1, an-1) 中国(北京, 上海, 江苏(南京, 苏州), 浙江(杭州), 广东(广州),数据结构(Java版)(第2版),5.3.2 广义表的存储结构,广义表的双链表示,数据结构(Java版)(第2版),第6章 树和二叉树,6.1 树及其抽象数据类型 6.2 二叉树及其抽象数据类型 6.3 二叉树的表示和实现 6

35、.4 线索二叉树 6.5 哈夫曼编码与哈夫曼树 6.6 树的表示目的:理解树结构。 要求:掌握二叉树的表示和实现。 重点:二叉树实现,哈夫曼树。 难点:线索二叉树,哈夫曼树。,数据结构(Java版)(第2版),6.1 树及其抽象数据类型,6.1.1 树定义 6.1.2 树的术语 6.1.3 树的表示法 6.1.4 树抽象数据类型,数据结构(Java版)(第2版),6.1.1 树定义,树(tree)是由n(n0)个结点组成的有限集合。n=0的树称为空树;n0的树T: 根(root)结点,它没有前驱结点。 其他结点分为m棵互不相交的子树。,数据结构(Java版)(第2版),6.1.2 树的术语,父

36、母、孩子与兄弟结点 度 结点层次、树的高度 边、路径 无序树、有序树 森林,数据结构(Java版)(第2版),6.1.3 树的表示法,图示法 横向凹入表示法 ABEFCGDHIJ 广义表表示 A(B(E, F), C(G), D(H, I, J),数据结构(Java版)(第2版),6.1.4 树抽象数据类型,public interface TTree /树接口boolean isEmpty(); /判断是否空树E getRoot(); /返回根结点元素E getParent(E child); /返回child的父母结点int getChildCount(E parent); /返回pare

37、nt孩子结点数E getFirstChild(E parent); /返回parent的孩子结点E getNextSibling(E element); /返回下一个兄弟结点void traverse(); /遍历树void insert (E parent, E element); /插入作为parent的孩子void remove(E parent); /删除以parent为根的子树void clear(); /清空 ,数据结构(Java版)(第2版),6.2 二叉树及其抽象数据类型,6.2.1 二叉树定义 6.2.2 二叉树性质 6.2.3 二叉树抽象数据类型,数据结构(Java版)(第

38、2版),6.2.1 二叉树定义,二叉树(binary tree)是n个结点的有限集合: 空二叉树; 由一个根结点、两棵互不相交的左子树和右子树组成。,数据结构(Java版)(第2版),6.2.2 二叉树性质,性质1:若根结点的层次为1,则二叉树第i层最多有2i1(i1)个结点。 性质2:在高度为k的二叉树中,最多有2k1个结点(k0)。 性质3:设一棵二叉树的叶子结点数为n0,2度结点数为n2,则n0=n2+1。,数据结构(Java版)(第2版),性质4:一棵具有n个结点的完全二叉树,其高度 。性质5:一棵具有n个结点的完全二叉树,对序号为i(0in)的结点,有: 若i=0,则i为根结点,无父

39、母结点;若i0,则i的父母结点序号为。 若2i+1n,则i的左孩子结点序号为2i+1;否则i无左孩子。 若2i+2n,则i的右孩子结点序号为2i+2;否则i无右孩子。,数据结构(Java版)(第2版),6.2.3 二叉树抽象数据类型,public interface BinaryTTree /二叉树接口boolean isEmpty(); /判断是否空二叉树int count(); /返回二叉树的结点个数int height(); /返回二叉树的高度BinaryNode getRoot(); /返回二叉树的根结点BinaryNode getParent(BinaryNode node); /返

40、回node父母结点void preOrder(); /先根次序遍历二叉树void inOrder(); /中根次序遍历二叉树void postOrder(); /后根次序遍历二叉树void levelOrder(); /按层次遍历二叉树BinaryNode search(E element); /查找并返回元素为element结点void insert(BinaryNode p, E element, boolean leftChild);/插入element元素作为p结点的左/右孩子void remove(BinaryNode p, boolean leftChild); /删除p的左/右子

41、树void clear(); /清空 ,数据结构(Java版)(第2版),6.3 二叉树的表示和实现,6.3.1 二叉树的存储结构 6.3.2 二叉树的二叉链表实现 6.3.3 二叉树的遍历 6.3.4 构造二叉树 6.3.5 二叉树的插入和删除操作 6.3.6 二叉树遍历的非递归算法 6.3.7 二叉树的层次遍历,数据结构(Java版)(第2版),6.3.1 二叉树的存储结构,二叉树的顺序存储结构,数据结构(Java版)(第2版),2.二叉树的链式存储结构,二叉链表 三叉链表,数据结构(Java版)(第2版),6.3.2 二叉树的二叉链表实现,二叉链表结点类 public class Bin

42、aryNode /二叉树的二叉链表结点类public E data; /数据元素public BinaryNode left, right; /分别指向左、右孩子 二叉树类 public class BinaryTree /二叉树类protected BinaryNode root; /根结点 ,数据结构(Java版)(第2版),6.3.3 二叉树的遍历,先根次序:访问根结点,遍历左子树,遍历右子树。 中根次序:遍历左子树,访问根结点,遍历右子树。 后根次序:遍历左子树,遍历右子树,访问根结点。 先根遍历序列:A B D G C E F H 中根遍历序列:D G B A E C H F 后根遍

43、历序列:G D B E H F C A,数据结构(Java版)(第2版),二叉树三种次序遍历的递归算法,private void preOrder(BinaryNode p) /先根次序遍历以p结点为根的子树if (p!=null) /若二叉树不空System.out.print(p.data+“ “); /访问当前结点preOrder(p.left); /按先根次序遍历当前结点的左子树preOrder(p.right); /按先根次序遍历当前结点的右子树【例6.1】 构造并遍历二叉树。 基于遍历的操作,数据结构(Java版)(第2版),6.3.4 构造二叉树,先根和中根序列表示,数据结构(J

44、ava版)(第2版),2.标明空子树的先根序列表示,【例6.2】 输出二叉树中指定结点的所有祖先结点。,数据结构(Java版)(第2版),3.广义表表示,数据结构(Java版)(第2版),4.以完全二叉树的层次遍历序列构造链式存储结构的完全二叉树,【例6.3】 建立二叉链表表示的完全二叉树。,数据结构(Java版)(第2版),6.3.5 二叉树的插入和删除操作,插入一个结点 删除一棵子树,数据结构(Java版)(第2版),6.3.6 二叉树遍历的非递归算法,数据结构(Java版)(第2版),6.3.7 二叉树的层次遍历,数据结构(Java版)(第2版),6.4 线索二叉树,6.4.1 线索二叉树定义,数据结构(Java版)(第2版),6.4.2 中序线索二叉树,二叉树的中序线索化 中序线索二叉树类 中根次序遍历中序线索二叉树 【例6.4】 构造中序线索二叉树并进行中根次序遍历。 先根次序遍历中序线索二叉树 后根次序遍历中序线索二叉树,数据结构(Java版)(第2版),1.二叉树的中序线索化,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报