树转换为二叉树小技巧

有下图所示的一树形结构

在转换时,保留原树中左子结点的那条边,作为转换后二叉树的左子节点的边;删除剩余的其他边,同时将树中的兄弟节点直接相连,将这些边作为转换后右子节点的边。如下图所示:

整理后如下图所示:

转换前后,树的前序遍历和二叉树的前序遍历相同,均为:123567489

树的后序遍历和二叉树的中序遍历相同,均为:256738941

时间: 2025-01-07 11:38:26

树转换为二叉树小技巧的相关文章

编程将二叉树(子女右兄弟链)转换为树然后将树转换为二叉树(直接修改) 非递归实现

将子女右兄弟链修改为普通树然后将普通树修改为子女右兄弟链,注意是在原树上直接进行修改,不是根据原树创建转换后的新树,为了操作方便,树指针域用vector表示 C++代码: 子女右兄弟链存在共享子树情形: 1 #include "stdafx.h" 2 #include <iostream> 3 #include <stack> 4 #include <vector> 5 #include <string> 6 #include <m

【转】将一棵树转换为二叉树后,为什么根节点没有右子树

树转化为二叉树时结点左子树是原来的孩子结点,右子树是原来的兄弟结点.即取根节点左孩子向右连接他的兄弟结点(在同一层次的节点,原来互不相连)并把它的子树,而把除左孩子外,原来与根节点相连的线擦除.这样根节点没有右孩子,因为由树转化来的二叉树某个节点A的左子树是原来作为树时A的孩子,其右子树是他的兄弟. 原文地址:https://www.cnblogs.com/schips/p/10630811.html

数据结构2 树与二叉树

1.树结构是一种非常重要的非线性结构,该结构中的一个数据元素可以有两个或两个以上的直接后继元素,树可以用来描述客观世界中广泛存在的层次结构关系. 2. 树本身是递归的,即一棵树由若干颗子树构成,而子树又由更小的子树构成. 3. 二叉树的遍历过程实质上是按一定规则将之线性化的过程.按照先遍历左子树后遍历右子树的约定,根据访问根结点位置的不同,可得到二叉树的先序.中序.后序的遍历方法. 对于上面的二叉树,若采用先序遍历法,则按照根结点-左子树-右子树的顺序迭代遍历,先输出1,然后遍历其左子树,输出左

数据结构学习之第7章 树和二叉树

数据结构学习之第7章 树和二叉树 0x7.1.1 树的基本概念 ?1.树的定义 ? 树是由n(n>=0)个结点(或元素)组成的有限集合(记为T) ? 如果n>0,这n个结点中有且仅有一个结点作为树的根结点,简称为根,其余结点可分为m(m>=0)个互不相交的有限集\[T_{1}T_{2}\cdots T_{m}\],其中每个子集又是一棵符合定义的子树,称为根结点的子树. 知识点:由树的定义我们可以看出来树的结构是递归的 ?2.树的逻辑表示法 ? 1.树形表示法 ? 2.文氏图表示法 ? 3

树、二叉树、森林的转换

树转换为二叉树 (1)加线.在所有兄弟结点之间加一条连线. (2)去线.树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线. (3)层次调整.以树的根节点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明.(注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子) 森林转换为二叉树 (1)把每棵树转换为二叉树. (2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来. 二叉树转换为树 是树转换为二

数据结构学习笔记(树、二叉树)

树(一对多的数据结构) 树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树种: (1)有且仅有一个特定的称为根(Root)的结点: (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2........Tn,其中每一个集合本身又是一棵树,并且称为根的子树. 对于树的定义还需要强调两点:1.n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点.2.m>0时,子树的个数没有限制,但它们一定是互不相交的. 结点

数据结构-王道2017-第4章 树与二叉树-树、森林

1.树的存储结构有多种,既可以采用顺序存储结构,也可以采用链式存储结构,都要求能唯一地反映出树中各结点之间的逻辑关系,三种常用的存储结构 1)双亲表示法 采用一组连续空间来存储每个结点,同时在每个结点中增设一个伪指针,指示其双亲节点在数组中的位置,根节点下标为0,其伪指针域为-1. #define MAX_TREE_SIZE 100 //树中最多结点数 typedef struct{ //树的结点定义 ElemType data; //数据元素 int parent; //双亲位置域 }PTNo

树与二叉树的转换

将树转换为二叉树的步骤如下: 1加线:所有兄弟节点之间加线 2去线:保留树中每个结点与它第一个孩子的连线,删除其与其他孩子的连线 3层次调整:以根结点为轴心,将整棵树旋转,使之层次分明. 而将二叉树转换为树,正好是一个相逆的过程. 当以二叉链表做树的存储结构时,树的线序遍历和后续遍历完全可以借用二叉树的先序遍历和中序遍历的算法来实现.这其实也证实,我们找到了对树这种复杂问题的简单解决方法.

森林、树与二叉树相互转换

1.森林转二叉树 (1).把每棵树转换为二叉树 (2).第一棵二叉树不动,从第二棵二叉树开始,一次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来. 转换规则:兄弟相连,长兄为父,孩子靠左. 2.树转二叉树 (1).加线.在所有的兄弟结点之间加一条线. (2).去线.树中的每个结点,只保留它与第一个孩子结点的连线,删除其他孩子结点之间的连线. (3).调整.以树的根结点为轴心,将整个树调节一下(第一个孩子是结点的左孩子,兄弟转过来的孩子是结点的右孩子) 3.二叉树转树 (1)