树与森林¶
树的存储结构¶
双亲表示法¶
孩子表示法¶
孩子兄弟表示法¶
树、森林与二叉树的转换¶
-
将树转换为二叉树:
-
在兄弟节点之间加一连线
-
对每个节点,只保留它与第一个子节点的连线,而抹去它与其他子节点的连线
-
以树根为轴心,顺时针旋转 \(45^\circ\)
-
-
由树转换成二叉树,其根结点的右子树总是空的
-
将森林转换成二叉树:
与将树转换成二叉树的操作类似。
-
将森林中的每棵树转换成相应的二叉树
-
每棵树的根也可视为兄弟结点,在每棵树的根之间加一连线
-
以第一棵树根为轴心,顺时针旋转 \(45^\circ\)
-
-
由森林转换而成的二叉树,其左子树为其第一棵树的二叉树,其右子树为其剩余树构成的二叉树
-
判断一棵二叉树能够转换成一棵树还是森林: 该二叉树的根结点有没有右孩子,有的话就是森林,没有的话就是一棵树
-
从二叉树还原为树或森林只需执行上述操作的逆操作
树与森林的遍历¶
树的遍历¶
-
先根遍历: 若树非空,则先访问根结点,然后依次先根遍历各棵子树
-
后根遍历: 若树非空,则先依次后根遍历各棵子树,然后访问根结点
与二叉树的先序遍历和中序遍历类似。
森林的遍历¶
-
先序遍历: 若森林非空,则先访问森林中第一棵树的根结点,然后依次先序遍历各棵子树,再依次先序遍历森林中其余树构成的森林
-
中序遍历: 若森林非空,则先访问森林中第一棵树的根结点,然后依次中序遍历各棵子树,再依次中序遍历森林中其余树构成的森林
与二叉树的先序遍历和中序遍历类似。











