数据结构 - 树、森林的转换

479 阅读2分钟

数据结构中,树和森林都是非常常见的逻辑结构。

树由n(n>=0)节点组成的有限集,当n=0时,表示空树;
    当n>0时,需要满足(1)有且仅有一个根节点;
        (2)除根节点外的所有节点互为互不相交的有限集;
        
二叉树就是较为特殊的树,当存在根节点时,每一个父节点都只能有左右两个子节点,
    且左节点和右节点分别为对应的一棵树。
    
森林由n(n>=0)个树组成。

一、树 -> 二叉树

image.png

1、加线

同父节点的兄弟节点之间加线。

image.png

2、去线

除了长子节点(第一个子节点)外,其他子节点与父节点的连线去掉。

image.png

3、调整

长子节点为左子节点,兄弟节点为右子节点。

image.png

二、森林 -> 二叉树

image.png

1、每个树转二叉树

-> 二叉树

image.png

2、组合

将所有二叉树组合起来,第n(n表示步骤一转变的二叉树,n=1,n++)个树的父节点的右节点拼接上n+1个树的父节点。

image.png

三、二叉树 -> 树

image.png

1、加线

每个节点跟子节点的右节点、子节点的右节点的右节点...连接起来。

image.png

2、去线

由步骤一连接的节点去掉原本的线条。

image.png

3、调整

image.png

四、二叉树 -> 森林

image.png

1、拆开

将第n(n=1)、n+1、n+2...个二叉树父节点的右子节点拆开,成多个二叉树。

image.png

2、转树

二叉树 ->

image.png

3、调整

image.png

除二叉树外,还有其他特殊的二叉树,如满二叉树、哈夫曼树、排序二叉树、平衡二叉树

哈夫曼树:节点的权重之和最小的二叉树。

排序二叉树:左节点比父节点小,右节点比父节点大。

平衡二叉树:兄弟节点对应的树(每一个节点下的所有节点也是一棵树)的高度差不大于1。

二叉树的遍历有三种,分别是前序遍历、中序遍历、后序遍历

前序遍历:根-左-右

中序遍历:左-根-右

后序遍历:左-右-根

以上是关于 树-图 相互转换、特殊二叉树以及二叉树遍历方法的介绍,如果错误,请指出来。