IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构(王卓) -> 正文阅读

[数据结构与算法]数据结构(王卓)

目录

5.5.1遍历二叉树

一.遍历

1.定义

2.目的

3.用途

二.遍历二叉树算法描述

1.遍历方法

2.先序二叉树的操作定义(根左右)

?3.中序遍历二叉树的操作定义(左根右)

?4.后序遍历二叉树的操作定义(左右根)

?三.根据遍历序列确定二叉树

1.根据遍历序列确定二叉树

2.由先和中序推二叉树

?3.由中和后序推二叉树

四.遍历的算法实现--先序遍历

?1.先序序列的递归算法

?2.中序遍历的算法实现

3.后序遍历的算法实现

五.中序遍历非递归算法

1.二叉树中序遍历的非递归算法的关键

2.建立思想

3.算法实现

?六.二叉树的层次遍历

1.定义

2.算法设计思路:使用一个队列

3.算法实现

?七.二叉树的建立

1.按先序遍历序列建立二叉树的二叉表

2.唯一确定二叉树

?八.复制二叉树

1.算法思路

?九.计算二叉树深度

1.算法思路

2.算法实现

?十.计算二叉树结点总数

1.算法思路

?2.计算二叉树叶子结点数

?十一.线索二叉树

1.利用二叉链表中的空指针域

2.表示区分

?5.6树和森林

一.树和森林

1.相关定义

二.树的存储结构

1.双亲表示法

?2.孩子链表

3.孩子兄弟表示法(二叉树表示法)

?三.树与二叉树的转换

四.树与森林的遍历

1.树的遍历

?2.森林的遍历


5.5.1遍历二叉树

一.遍历

1.定义

顺着某一条搜索路径寻访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次(又称周游)

2.目的

得到树中所有的一个线性排列

3.用途

它是树结构插入、删除、修改、查找和排序运算的前提,是二叉树一切运算的基础和核心

二.遍历二叉树算法描述

1.遍历方法

?

2.先序二叉树的操作定义(根左右)

?3.中序遍历二叉树的操作定义(左根右)

?4.后序遍历二叉树的操作定义(左右根)

?三.根据遍历序列确定二叉树

1.根据遍历序列确定二叉树

  • 若二叉树中各结点的值均不相同,则二叉树结点的先序序列、中序序列和后序序列都是唯一的
  • 由二叉树的先序序列和中序序列,或由二叉树的后序序列和中序序列可以确定唯一一棵二叉树

2.由先和中序推二叉树

?3.由中和后序推二叉树

四.遍历的算法实现--先序遍历

?1.先序序列的递归算法

?2.中序遍历的算法实现

3.后序遍历的算法实现

五.中序遍历非递归算法

1.二叉树中序遍历的非递归算法的关键

在中序遍历过某结点的整个左子树后,如何找到该结点的根以及右子树

2.建立思想

  • 建立一个栈
  • 根结点进栈,遍历左子树
  • 根结点出栈,输在根结点,遍历右子树

3.算法实现

?六.二叉树的层次遍历

1.定义

对于一颗二叉树,从根结点开始,按从上到下,从左到右的顺序访问每一个结点,每一个结点仅仅访问一次

2.算法设计思路:使用一个队列

(1)将根结点进队

(2)队不空时循环:从队列中出列一个结点*p,访问它;

  • 若它有左孩子结点,将左孩子结点进队;
  • 若它有右孩子,将右孩子结点进队。

3.算法实现

?

?七.二叉树的建立

1.按先序遍历序列建立二叉树的二叉表

(1)例:已知先序序列为:ABCDEGF

  • 从键盘输入二叉树的结点信息,建立二叉树的存储结构;
  • 在建立二叉树的过程中按照二叉树先序方式建立;

2.唯一确定二叉树

?八.复制二叉树

1.算法思路

(1)如果是空树,递归结束;

(2)否则,申请新结点空间,复制根结点

  • 递归复制左子树
  • 递归复制右子树

?九.计算二叉树深度

1.算法思路

(1)如果是空树,则深度为0

(2)否则,递归计算左子树的深度记为m,递归计算右子树的深度记为n,二叉树的深度则为m与n的较大者加1

2.算法实现

?十.计算二叉树结点总数

1.算法思路

(1)如果是空树,则结点个数为0

(2)否则,结点个数为左子树的结点个数+右子树的结点个数再+1

?2.计算二叉树叶子结点数

(1)如果是空树,则叶子结点个数为0

(2)否则,为左子树的叶子结点个数+右子树的叶子结点个数

?十一.线索二叉树

1.利用二叉链表中的空指针域

如果某个结点的左孩子为空,则将空的左孩子指针域改为指向其前驱;如果某结点的右孩子为空,则将空的右孩子指针域改为指向其后继——这种改变指向的指针称为“线索”

加上线索的二叉树称为线索二叉树,对二叉树按某种遍历次序使其变为线索二叉树的过程叫线索化

2.表示区分

为区分Irchid和rchild指针到底是指向孩子的指针,还是指向前驱或者后继的指针,对二叉链表中每个结点增设两个标志域Itag和rtag,并约定:

Itag=0 Ichild指向该结点的左孩子

Irag=1 Ichild指向该结点的前驱

rtag=0 rchild指向该结点的右孩子

rtag=1 rchild指向该结点的后继

?

?

?5.6树和森林

一.树和森林

1.相关定义

(1)森林:是m(m》0)棵互不相交的树的集合

(2)树:是n(n》0)个结点的有限集。若n=0,称为空树

若n>0

  • 有且仅有一个特定的称为根的结点
  • 其余结点可分为m(m》0)个互不相交的有限集T1,T2,.....

二.树的存储结构

1.双亲表示法

?(1)c语言的类型描述

?2.孩子链表

(1)定义:把每个结点的孩子结点排列起来,看成是一个线性表,用单链表存储,则n个结点有n个孩子链表(叶子的孩子链表为空表)。而n个头指针又组成一个线性表,用顺序表(含n个元素的结构数组)存储。

?(2)c语言的类型描述

3.孩子兄弟表示法(二叉树表示法)

(1)实现:用二叉链表作树的存储结构,链表中每个结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点

?

?三.树与二叉树的转换

四.树与森林的遍历

1.树的遍历

(1)先根(次序)遍历

若树不空,则先访问根结点,然后依次先根遍历各棵子树

(2)后根(次序)遍历

若树不空,则先依次后根遍历各棵子树,然后访问根结点

(3)按层次遍历

若树不空,则自上而下自左而右访问树中每个结点

?2.森林的遍历

?

?

?

?

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:28:41  更:2022-05-24 18:29:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:39:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码