二叉树(下)
来源:互联网 发布:小满crm软件 编辑:程序博客网 时间:2024/06/18 15:13
7、树、森林、二叉树
由于二叉树是一种更确定的数据结构(每个节点最多只有两个子节点),因此它的增删和遍历都比一般的树更加方便和容易实现,反观树的每个节点由于子节点的个数不确定,因此它的增删和遍历都比较复杂。实际上,树、森林和二叉树作为树的类型,他们之间是可以互相转换的。本文主要介绍森林与二叉树的相互转换、树与森林的遍历。
7.1 树转换为二叉树
- 加线:在所有兄弟节点之间增加一条连线
- 去线:对树中的每个节点,只保留每个节点与他的第一个孩子之间的连线,删除与其他孩子之间的连线
调整:以树的根节点为轴心,将整棵树顺时针旋转一定的角度,使之层次结构分明,第一个孩子为二叉树中节点的左孩子,兄弟转换过来的为右孩子。
7.2 森林转换为二叉树
森林是若干棵树的集合,因此森林也可以转换为二叉树,方法如下:
- 把森林中的每棵树都转换为二叉树
- 第一棵二叉树不动,从第二棵二叉树开始,依次将后一棵二叉树的根节点作为前一棵二叉树的右孩子,并用线连接起来。
- 进行调整,使其层次分明
7.3 二叉树转换为树、森林
二叉树转换为树、森林就是将树、森林转换为二叉树的逆过程。其方法如下:
- 加线:如果某节点的左孩子节点存在,则将该节点的左孩子的右孩子节点、右孩子的右孩子节点………都与该节点用线连接起来
- 去线:删除原二叉树中所有节点与右孩子节点 的连线
- 调整:使其结构分明
7.4 树和森林的遍历
树和森林的遍历也是按照某种规律对树或森林中的每个节点进行访问,且仅仅访问一次的操作。
7.4.1 树的遍历
按照访问树中根节点的先后次序,树的遍历分为先根遍历和后根遍历两种。
先根遍历的顺序如下:
- 访问根节点
- 按照从左到右的次序一次先根遍历每一棵子树
后根遍历的实现顺序如下:
- 按照从左到右的顺序依次后根遍历每一棵子树
- 访问根节点
7.4.2 森林的遍历
森林的遍历有先序遍历和中序遍历两种。
先序遍历的方法如下:
- 访问森林中第一棵树的根节点
- 先序遍历第一棵树的根节点的子树
- 先序遍历森林中剩余的子树
中序遍历的方法如下:
- 中序遍历第一棵树的根节点的子节点
- 访问森林中第一棵树的根节点
- 中序遍历森林中剩余的树
7.5 二叉树的确定
- 由先序遍历序列和中序遍历序列可以唯一的确定一棵二叉树
- 由后序遍历序列和中序遍历序列可以唯一的确定一棵二叉树
- 由先序遍历序列和后序遍历序列不能唯一的确定一棵二叉树
0 0
- 二叉树(下)
- 线索二叉树(下)
- 【数据结构】树和二叉树(下)
- 数据结构入门---初始二叉树(下)
- linux下的二叉树
- 最小堆/哈希表/二叉树/平衡二叉树/红黑树的意义(什么情况下使用)
- 最小堆/哈希表/二叉树/平衡二叉树/红黑树的意义(什么情况下使用)
- 二叉查找树的基类实现(下)
- 二叉树的创建和遍历方法(下)
- 剑指offer:往上到下打印二叉树(java)
- 树:二叉树几种形态(满二叉,完全二叉,线索二叉,二叉排序,平衡二叉,哈夫曼)
- 剑指offer_二叉树---二叉树的下一节点
- 二叉树、满二叉树、完全二叉树、二叉排序树(二叉查找树)、平衡二叉树
- C语言的二叉树算法 下
- 二叉树_C语言实现(下)
- linux下练习 c++ 有序二叉树
- 二叉树的下一结点
- 数据结构:最小堆/哈希表/二叉树/平衡二叉树/红黑树的意义(什么情况下使用)
- shell的输入输出重定向
- Particle Filter 简单理解
- 最小风险贝叶斯决策
- opencv图像像素操作方法
- Java基础3-关于修饰符
- 二叉树(下)
- 错误的类文件:apache-tomcat-7.0.73-windows-x64\apache-tomcat-7.0.73 \lib\servlet-api.jar(javax/servlet/http
- 2017.1.8linux下的C--结构体
- CSS干货系列(一)基本语法
- Unrecognized Windows Sockets error: 0: JVM_Bind
- LeetCode 328. Odd Even Linked List
- 【DDoS】
- swift浏览器
- ubuntu16.04下mysql5.7支持utf-8编码格式配置文件修改步骤