8.遍历二叉树、线索二叉树、森林

本文详细介绍了二叉树的四种遍历方法(先序、中序、后序、层次遍历),线索二叉树的概念以及树和森林的遍历。同时探讨了遍历在数据结构中的重要性及其应用,如建立二叉树、复制二叉树等。并提出了学习这些概念的方法,包括理解基本概念、实践算法和多做练习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思考

一.什么遍历二叉树、线索二叉树、森林?(What)

0.二叉树遍历一共(4种)

1.二叉树先序遍历

2.二叉树中序遍历

3.二叉树后序遍历

4.遍历分析

5.遍历二叉树

6.二叉树层次遍历

7.二叉树遍历算法的应用

1.建立二叉树

2.复制二叉树

3.计算二叉树深度

4.树结点总数

5.叶子结点树

8.线索二叉树

9.树和森林

1.树、森林定义

2.树的存储结构

10.树和二叉树的转换

1.树的二叉链表

2.二叉树的二叉链表

3.树转化成二叉树

4.二叉树转成树

5.森林转化成二叉树

6.二叉树转化成森林

11.树和森林的遍历

1.树的遍历:一共3种

2.森林的遍历

二.为什么需要遍历二叉树、线索二叉树、森林?(Why)

三.如何学好遍历二叉树、线索二叉树、森林?(How)

1.学习遍历二叉树、线索二叉树、森林,需要具备以下几点:

2.下面是一些学习二叉树、线索二叉树、森林的具体方法:


数据结构很重要!

数据结构很重要!!!

数据结构很重要!!!!

思考

1.什么遍历二叉树、线索二叉树、森林?(What)

2.为什么需要遍历二叉树、线索二叉树、森林?(Why)

3.如何学好遍历二叉树、线索二叉树、森林?(How)

注:特别感谢青岛大学王卓老师
 

第5章 树和二叉树.pdf

一.什么遍历二叉树、线索二叉树、森林?(What)

0.二叉树遍历一共(4种)

  1. 先序遍历
  2. 中序遍历
  3. 后序遍历
  4. 层次遍历

1.二叉树先序遍历

2.二叉树中序遍历

3.二叉树后序遍历

4.遍历分析

5.遍历二叉树

6.二叉树层次遍历

第一个先入队,一旦出队,孩子节点立马进队。

7.二叉树遍历算法的应用

1.建立二叉树

目前画了一棵二叉树

注:空的结点用#表示

1.输入一个字符,如果为#,则T则指向空节点,然后返回OK(指针回到上一层)

2.否则,如果T空间没有分配成功,则报错。

3.生成根结点,T->data=ch

4.构造左子树 CreateBiTree(T->lchild)

5.构造右子树 CreateBiTree(T->rchild)

2.复制二叉树

1.如果是空树,递归结束

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

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

3.计算二叉树深度

如果是空树,则深度为0;

否则,递归计算左子树的深度记为m,

递归计算右子树的深度记为n,

看m与n的较大者+1

4.树结点总数

如果是空树,则节点个数为0;

否则,结点个数为左子树的结点个数+右子树的结点个数+1

5.叶子结点树

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

否则,为左子树的叶子结点个数+右子树大的叶子结点个数

核心:

1.如果左孩子和右孩子,都为空,则叶子结点返回1

8.线索二叉树

无法直接找到该结点,在某种遍历与列中的前驱和后继节点

解决办法:

1.通过遍历寻找——费时间

2.再增设前驱、后继指针域——增加了存储负担

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

左孩子为空,将左孩子指针域改为指向其前驱(是指:线性排好后,元素的前驱)

根左右有孩子:0

根左右没有孩子:1

左空:前

又空:后

9.树和森林

1.树、森林定义

树:有且仅有一个特定的根,其余结点可以分为m个树。

森林:m棵互不相交的树的集合。

2.树的存储结构

1.双亲表示法

用数组存储:数据域+双亲域(上一结点存储位置)

data parent

0 R -1

1 A 0

1 B 2

r=0; //根结点位置

n=10; //结点个数

2.孩子链表

n个结点由n个孩子链表

叶子的孩子链表为空表

数组+链表

数组下标 数据 第一个孩子下的所有元素

0 A 3 5

1 B

2 C 6

孩子链表:找孩子容易

带双亲的链表,既能找孩子又能找双亲。

3.孩子兄弟表示法

找孩子容易,找兄弟容易

找双亲不容易。

每个结点的俩个指针域分别指向其第一个孩子节点下一个兄弟节点

4.总结:

1.双亲表示法

优点:找双亲容易

2.孩子链表

优点:找孩子容易

3.孩子兄弟表示法

找孩子和兄弟容易

10.树和二叉树的转换

1.树的二叉链表

2.二叉树的二叉链表

3.树转化成二叉树

每个结点指向他的 左孩子 下一个兄弟节点

加线:兄弟之间加一连线

抹线:除左孩子外,抹掉其他孩子与父节点的连线

旋转:以树的根为轴心,将整树顺时针旋转45°

口诀:兄弟相连留长子

4.二叉树转成树

加线:若p节点是父节点的左孩子,将p的右孩子,右孩子的右孩子.....沿分支找到所有的右孩子,都与p的父节点连线起来。

抹线:去掉原来右孩线

调整:将节点按层次排列,形成树形结构

5.森林转化成二叉树

将各棵树分别转换成二叉树

将每棵树的根结点用线相连

以第一颗树根为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树。

6.二叉树转化成森林

去掉全部右孩线,孤立二叉再还原。

11.树和森林的遍历

二叉树:一共有4种遍历,最后一种是层次遍历。

1.树的遍历:一共3种

1.先根

2.后根

3.层次遍历

注:没有中根,树不知道放在中间哪个地方好。

2.森林的遍历

1.先序遍历

2.中序遍历

方法2:

也可以按照树的后根遍历,遍历每一棵树,即可得到结果。

二.为什么需要遍历二叉树、线索二叉树、森林?(Why)

1.需要遍历,实现功能:遍历二叉树、线索二叉树、森林是因为在对这些数据结构进行操作时,需要按照一定的顺序依次访问它们的节点,以实现特定的功能。

2.搜索、排序、输出:具体来说,遍历二叉树是指按照某种规定的顺序访问二叉树中的所有节点,包括先序遍历、中序遍历、后序遍历等。通过二叉树的遍历,可以对二叉树中的节点进行搜索、排序、输出等操作,这在数据处理和算法实现中非常常见。

3.线索二叉树提高查询效率:是在普通二叉树的基础上,增加了一些额外的信息,如前驱节点和后继节点,可以提高在二叉树上的查找效率。遍历线索二叉树可以按照线索信息的顺序依次访问节点,而不需要像遍历普通二叉树一样需要递归遍历。

4.森林是由多棵树组成的数据结构,遍历森林也需要按照一定的顺序访问其中的树和节点,可以通过前序遍历、中序遍历、后序遍历等方式进行。在对森林进行遍历时,可以处理多个树中的节点信息,实现一些复杂的操作,如树的合并、划分等。

总之,对于这些数据结构,遍历是一种非常基础和重要的操作,可以帮助我们实现各种各样的算法和数据处理任务

三.如何学好遍历二叉树、线索二叉树、森林?(How)

1.学习遍历二叉树、线索二叉树、森林,需要具备以下几点:

  1. 掌握二叉树的基本概念和性质
  2. 熟悉二叉树的存储结构,包括顺序存储和链式存储。
  3. 了解二叉树的遍历方式,包括先序遍历、中序遍历和后序遍历。
  4. 熟悉线索二叉树和森林的概念和基本性质
  5. 学会使用递归和非递归的方法进行二叉树的遍历和线索化
  6. 进行多种不同类型的练习,包括编写程序、手动模拟遍历过程等,加深理解。

2.下面是一些学习二叉树、线索二叉树、森林的具体方法:

  1. 通过课程或教材系统地学习二叉树、线索二叉树、森林的相关概念、算法和应用
  2. 练习手写二叉树的遍历和线索化算法,了解二叉树遍历的递归和非递归方法,加深理解
  3. 通过编写程序实现二叉树遍历和线索化算法,实践中不断提升算法能力
  4. 参考优秀的算法书籍或网站,学习其他高效的遍历和线索化算法,例如 Morris 遍历算法等。
  5. 进行多种不同类型的练习,包括手动模拟遍历过程、绘制二叉树的图形等,加深理解。
  6. 在学习过程中,多与其他人交流,包括教师、同学或社区中的其他人,分享经验和学习心得


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperBigData~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值