数据结构(四)树---树的转换

(一)树转二叉树

步骤

1.加线:在所有兄弟结点之间加一条连线
2.去线:对树中每个结点,只保留他与第一个长子结点的连线,删除他与其他孩子结点之间的连线
3.层次调整。以树的根节点为轴心,将整棵树顺时针旋转一定角度,使结构层次分明。
注意:第一个孩子是二叉树结点的左孩子,兄弟转换过来的孩子是结点的右孩子
转换后,根节点只有左子树,最左侧链表不改变

(二)森林转二叉树

步骤

1.将每个树转换为二叉树
2.第一棵二叉树不动,从第二棵二叉树开始,依次吧后一棵二叉树的根节点作为前一棵二叉树的根节点的右子树,用线连接起来。当所有的二叉树连接起来,就得到了由森林转换而来的二叉树

(三)二叉树转换为树

步骤

1.若某结点的左孩子存在,则将该左孩子的右孩子结点,以及该左孩子的右孩子的右孩子结点,以及...,就是左孩子的n个右孩子结点都作为此结点的孩子。将该结点与这些右孩子结点用线连接
2.去线:删除原二叉树中所有结点与其右孩子结点的连线

(四)二叉树转森林

我们从一:知道树转二叉树只有左子树,森林转二叉树会同时存在左子树和右子树
所以判断一棵树能够转换为一棵树还是一个森林,就看这个二叉树的根节点有没有右孩子

步骤

1.从根节点开始,若是右孩子存在,将右链拆开,所有的右孩子连线都删除。得到分离的二叉树。
2.再将每棵分离后的二叉树转换为树即可

(五)树的遍历

法一:先根遍历

先根遍历树,即先访问树的根节点,然后依次先根遍历根的每棵子树(类似于先序遍历)

法二:后根遍历

后根遍历,即先依次后根遍历每棵子树,然后再访问根节点。(类似于后序遍历)

(六)森林的遍历

法一:前序遍历

先访问森林的第一棵树的根节点,然后依次先根遍历....,再依次用同样方法遍历下一棵树....

法二:后序遍历

先访问森林的第一棵树的根节点,然后依次后根遍历....,再依次用同样方法遍历下一棵树....

(七)总结

树,森林的前根(序)遍历和二叉树的前序遍历结果相同,树,森林的后根(序)遍历和二叉树的中序遍历结果相同
可以根据(一)和(二)轻松推出结论,然后利用这种规律,解决这些复杂的树,森林遍历问题

原文地址:https://www.cnblogs.com/ssyfj/p/9466881.html

时间: 2024-08-28 14:56:26

数据结构(四)树---树的转换的相关文章

《数据结构与算法分析:C语言描述》复习——第四章“树”——AVL树

2014.06.15 16:22 简介: AVL树是一种高度平衡的二叉搜索树,其命名源自于联合发明算法的三位科学家的名字的首字母.此处“平衡”的定义是:任意节点的左右子树的高度相差不超过1.有了这个平衡的性质,使得AVL树的高度H总是接近log(N),因此各种增删改查的操作的复杂度能够保证在对数级别.没有bad case是AVL树与普通的二叉搜索树的最大区别.为了实现平衡性质,我们需要记录每个节点的高度(或者平衡因子)来检测不平衡的情况.为了修正高度不平衡,需要用到“旋转”的方法,分为单旋转和双

数据结构整理(二) 树

一.前言 项目源码及其他声明等参见数据结构(一)线性结构篇. 二.相关概念 树作为一种应用广泛的一对多非线性数据结构,不仅有数据间的指向关系,还有层级关系,示例见图一.因树的结构比较复杂,为了简化操作及存储,我们一般将树转换为二叉树处理,因此本文主要讨论二叉树. 二叉树 二叉树是每个节点最多拥有两个子节点的树结构,若移除根节点则其余节点会被分成两个互不相交的子树,分别称为左子树和右子树.二叉树是有序树,左右子树有严格的次序,若颠倒则成为一棵不一样的二叉树. 满二叉树 满二叉树,顾名思义除叶子节点

数据结构之AVL树

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 在前面的博文中,我们已经介绍了数据结构之二分查找树的相关知识,二分查找的提出主要是为了提高数据的查找效率.同一个元素集合可以对应不同的二分查找树BST,二分查找树的形态依赖于元素的插入顺序.同时我们也已经知道,如果将一个有序的数据集依次插入到二查找树中,此时二分查找树将退化为线性表,此时查找的时间复杂度为o(n).为了防止这一问题的出现,便有了平衡二叉树的存在价值.平衡二叉树从根本上将是为了防止出现斜二叉树的出现,从而进一步提高元素的查找效率,

数据结构和算法 (二)数据结构基础之树、二叉树

Java面试宝典之二叉树的实现 我们接着上一篇数据结构继续讲解.本章系数据结构之树与二叉树,从这章开始,我们就要介绍非线性结构了,这些内容理解起来比线性表稍难一些,我尽量写的通俗一些,如果读的过程中有任何问题,请按上述方式联系我! 一.树 树 形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树.树结构在客观世界中是大量存在的,例如家 谱.行政组织机构都可用树形象地表示.树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结

数据结构与算法->树

代码: 兵马未动,粮草先行 作者: 传说中的汽水枪 如有错误,请留言指正,欢迎一起探讨. 转载请注明出处. 目录 一. 2-3-4树的定义 二. 2-3-4树的可以得到几个推论 三. 2-3-4树数据结构定义 四. 2-3-4树节点相关方法定义与解释 五. 2-3-4树查找逻辑解释和代码实现 六. 2-3-4树插入逻辑解释和代码实现 一. 2-3-4树的定义

【数据结构】Trie树的应用:查询IP地址的ISP(Java实现)

查询IP地址的ISP 给定一个IP地址,如何查询其所属的ISP,如:中国移动(ChinaMobile),中国电信(ChinaTelecom),中国铁通(ChinaTietong)? 现在网上有ISP的IP地址区段可供下载,比如中国移动的IP地址段 103.20.112.0/22 103.21.176.0/22 111.0.0.0/10 112.0.0.0/10 117.128.0.0/10 120.192.0.0/10 183.192.0.0/10 211.103.0.0/17 211.136.

【经典数据结构】B树与B+树

本文转载自:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树.与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作.B-tree算法减少定位记录时

【数据结构】Trie树

1.Trie树简介 Trie树,又称字典树.前缀树,被用于信息检索(information retrieval)的数据结构.Trie一词便来自于单词retrieval.基本思想:用字符串的公共前缀降低查询时间.比如,在最优的查询二叉树中查询关键字的时间复杂度为M * log N,M是字符串最大长度,N为字符串数量:而用Trie树时,只需O(M)时间. [1] 中给出一个简单Trie树例子,蓝色表示一个单词结尾:该Trie树存储的单词为the, their, there, a, any, answ

D&F学数据结构系列——B树(B-树和B+树)介绍

B树 定义:一棵B树T是具有如下性质的有根树: 1)每个节点X有以下域: a)n[x],当前存储在X节点中的关键字数, b)n[x]个关键字本身,以非降序存放,因此key1[x]<=key2[x]<=...<=keyn[x][x], c)leaf[x],是一个布尔值,如果x是叶子的话,则它为TRUE,如果x为一个内节点,则为FALSE. 2)每个内节点包含n[x]+1个指向其子女的指针c1[x],c2[x],...,cn[x]+1[x].叶节点没有子女,故它们的ci域无意义. 3)各关键

《数据结构》线段树入门(二)

今天继续介绍——线段树之延迟标记 接上期<数据结构>线段树入门(一):http://www.cnblogs.com/shadowland/p/5870339.html 在上期介绍了线段树的最基本内容(线段树单点修改,区间查询),这次将介绍:区间修改,区间查询. Question: 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述: 第一行一个正整数n,接下来n行n个整数,再接下来一个正整数Q,每行表示操作的个数,如果第一数是1,后接3个正