当前位置: 首页 > article >正文

数据结构中树、森林 与 二叉树的转换

1 树转换为 二叉树

将树转换成二叉树的步骤是:

  1. 加线。在所有的兄弟结点之间加一条线。
  2. 去线。对于树中的每个结点,只保留它与第一个孩子结点的连线,删除该结点其他孩子结点之间的连线。
  3. 调整。以树的根结点为轴心,将整个树顺时针旋转一定的角度(该结点的第一个孩子是该结点的左孩子,左孩子的兄弟是该结点的右孩子 )

在这里插入图片描述

2 森林转换为二叉树

森林是由若干棵树组成,可以将森林中的每棵树的根结点看作是兄弟,由于每棵树都可以转换为二叉树,所以森林也可以转换为二叉树。

将森林转换为二叉树的步骤是:

  1. 先把每棵树转换为二叉树;
  2. 第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子结点,用线连接起来。当所有的二叉树连接起来后得到的二叉树就是由森林转换来的二叉树。

在这里插入图片描述

3 二叉树转换为树

二叉树转换为树是树转换为二叉树的逆过程,其步骤是:

  1. 加线。若某结点的左孩子结点存在,将该左孩子结点的右孩子结点、右孩子结点的右孩子结点……都作为该结点的孩子结点,将该结点与这些右孩子结点用线连接起来;
  2. 去线。删除原二叉树中所有结点与其右孩子结点的连线;
  3. 整理(1)和(2)两步得到的树,使之结构层次分明。

在这里插入图片描述

4 二叉树转换为森林

二叉树转换为森林步骤如下:

  1. 先把每个结点与右孩子结点的连线删除,得到分离的二叉树;
  2. 把分离后的每棵二叉树转换为树;
  3. 整理第(2)步得到的树,使之规范,这样得到森林。

在这里插入图片描述

5 实战演练

5.1 例题1

(2009年408第6题)题目:将森林转换为对应的二又树,若在二又树中,结点 是结点 的父结点的父结点,则在原来的森林中,u和可能具有的关系是

I.父子关系
II.兄弟关系
III.u的父结点与的父结点是兄弟关系

A.只有II
B.I和II
C.I和III
D.I、II和III

解析:
在这里插入图片描述

5.2 例题2

(2014年408第5题)题目:将森林 F 转换为对应的二叉树 T,F 中叶结点的个数等于

A.T中叶结点的个数
C.T中左孩子指针为空的结点个数
B.T中度为 1的结点个数
D.T中右孩子指针为空的结点个数

解析:

在这里插入图片描述


http://www.kler.cn/news/136358.html

相关文章:

  • Java基础(7)图书管理系统
  • ArcGIS001:ArcGIS10.2安装教程
  • 从本地到云端:跨用户请求问题的完美解决方案
  • 重构案例:将纯HTML/JS项目迁移到Webpack
  • 凸轮应用实例(带进料装置的伺服压机控制)
  • 10-1.idea中的项目结构,辅助快捷键,模块的操作
  • 比Postman强在哪里
  • PyTorch 实战之水果分类
  • git常用的命令
  • Leetcode hot 100
  • shell 判断文件是否存在(csh bash)
  • 猫12分类:使用多线程爬取图片的Python程序
  • git基本用法和操作
  • Python数据结构——List
  • Python - Wave2lip 环境配置与 Wave2lip x GFP-GAN 实战 [超详细!]
  • PgSQL技术内幕-Bitmap Index Scan
  • JAVA整理学习实例(四)数据结构
  • 嵌入式工程师职业方向
  • 【前端学java】java中的日期操作(12)
  • 基于SpringBoot的SSMP整合案例(消息一致性处理与表现层开发)
  • react经典面试题解析
  • BUG:编写springboot单元测试,自动注入实体类报空指针异常
  • Linux本地WBO创作白板部署与远程访问
  • [软件安装]anaconda安装
  • openfeign整合sentinel出现异常
  • Python-正则表达式使用