树、森林与二叉树的转换,森林的遍历

树、森林与二叉树的转换,森林的遍历

从树的孩子兄弟表示法和二叉树的二叉链表示法可以看出,树的孩子兄弟表示法实质上是二叉树的二叉链表存储形式,第一个孩子指针和有兄弟指针分别相当于二叉链表的左孩子指针和右孩子指针。所以从物理结构上看,树的右孩子兄弟表示法和二叉树的二叉链表是相同的,只是解释不同。如

在这里插入图片描述

树转换为二叉树

将一棵树转换为二叉树的方法是:

  1. 加线——树中所有相邻兄弟之间加一条线
  2. 去线——对树中的每个结点,只保留它与第一个孩子结点之间的连线,删去它与其他孩子之间的连线
  3. 层次调整——以根结点为中心,将树顺时针转动一定的角度,使之层次分明

在这里插入图片描述

如上图,可见,在二叉树中,左分支上的个节点在原来树中是父子关系,而右分支上的结点在原来树中式兄弟关系。由于根节点没有兄弟结点,所有转换后根节点的右子树必为空。

树与二叉树的遍历关系如下:

树 的 前 序 遍 历 ⇔ 二 叉 树 的 前 序 遍 历 树的前序遍历 \Leftrightarrow 二叉树的前序遍历

树 的 后 序 遍 历 ⇔ 二 叉 树 的 中 序 遍 历 树的后序遍历 \Leftrightarrow 二叉树的中序遍历

森林转换为二叉树

森林是若干棵树的集合,将森林中的每棵树转换为二叉树,再将每棵树的根节点视为兄弟结点,这样,森林也可以转换为二叉树。具体转换方法如下:

  1. 将森林中每棵树都转换成二叉树
  2. 从第二棵树开始,依次把后一棵二叉树的根节点作为前一棵二叉树的根节点的右孩子,当所有二叉树连起来后,此时所得到的二叉树就是由森林转换得到的二叉树。

在这里插入图片描述

二叉树转换为树或森林

树和森林都可以转换为二叉树,二者不同的是树转换的二叉树,其根节点无右子树,而森林转换后的二叉树,其根节点有右子树。这一过程是可逆的,即可以依据二叉树的根节点有无右子树,将一棵二叉树还原为树或森林,具体转换方法如下:

  1. 加线——若某节点x是双亲y的左孩子,则把结点x的右孩子、右孩子的右孩子……,都与y用线连起来
  2. 去线——删除原二叉树中所有双亲结点与右孩子结点的连线
  3. 层次调整——整理由 1,2 两步所得到的树或森林,使之层次分明
    在这里插入图片描述

森林的遍历

森林遍历有两种方法:前根遍历和后根遍历:

  1. 先根遍历森林即为先根遍历森林中的每一棵树,对下图的森林进行先根遍历,得到的序列为:A B C D E F G H I J。跟森林转化成的二叉树前序遍历序列一致。
  2. 后根遍历森林即为后根遍历森林中的每一棵树,对下图的森林进行后根遍历,得到的序列为:B A D E F C H J I G。跟森林转化为的二叉树中序遍历序列一致。
    在这里插入图片描述
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值