树、森林、二叉树的相互转化

一、树、森林、二叉树的定义

①树:树是n个节点的有限集。当n=0时称为空树,在任意一个非空树中满足以下两个条件:<1>有且仅有一个特定的节点为根节点<2>其余节点可分为m个互不相交的有限集,这个有限集本身又是一棵树,并成为这棵树的子树。

②二叉树:二叉树的定义和树的定义类似,二叉树是一由n个节点构成的有限集合,该集合为空集的时候称为空二叉树,当n不等于0时,它是由一个根节点(n=1)或者一个根节点和两颗互不相交的分被称为根节点的左子树和右子树组成的。(n>=2)。

③森林:森林是由若干个树组成的,森林中的每一棵树都是兄弟。

二、树转换成二叉树

①加线:在所有的兄弟节点之间加一条直线

②去线:对树中的每一个节点只保留它与第一个孩子节点的连线(我们加的线不要动)

③层次调整:以树的根节点为轴线,旋转一定的角度,使其层次分明(其实加线去线之后二叉树已经生成成功,但是不好看,我们其实就是调整一下位置,让它好看一些)

三、森林转换成二叉树

①把森林中的每一棵树都转换成二叉树

②第一棵二叉树不动,从第二棵二叉树开始,依次把其根节点当成前一棵树根节点的右孩子,并依次连接(注:第二棵树的根节点是第一棵树根节点的右孩子)

四、二叉树转换为树

其实就是树转换成二叉树的逆序而已。

①加线:把所有该节点左孩子的所有右孩子节点(包括左孩子右孩子的右孩子节点)作为该节点的孩子,连接起来。

②去线:删除原来二叉树中所有节点与其右孩子的节点的连线

③层次调整。

五、二叉树转换成森林

如何判断一棵二叉树是否能转换成森林呢:其实就是看这棵二叉树的根节点有没有右孩子,要是有右孩子就是森林,没有就是一棵树。

①从根节点开始,若根节点的右孩子存在,就把该根节点与右孩子的连线删除,再看分离之后的二叉树的跟节点是否存在右孩子节点,有就删除该根节点与右孩子节点的连线(注意:分离之后的一定要是二叉树)

②把所有二叉树转换为树。

六、树和森林

树本身就是森林的子集,不需要转换。

你可能感兴趣的:(数据结构,二叉树,森林,树,相互转换)