树:树、森林、二叉树的转换

三者直接的转换:树 二叉树 森林

二叉树森林
先序遍历先根遍历先序遍历
中序遍历
后序遍历后根遍历中序遍历

一:树变二叉树

概述:

每个结点的左指针指向它的第一个孩子结点。右指针指向它在树中的相邻兄弟结点。 也即:左孩子右兄弟。根没有兄弟,所以转换以后的树没有右子树。

步骤:
  1. 在兄弟之间连线
  2. 对每一个结点,只保持它与第一个子结点(长子)的连线,与其他子结点的连线全部抹去
  3. 以树根为轴心,顺时针旋转45度。
    这里写图片描述

二:二叉树变树

####概述:
是树变二叉树的逆过程。问:二叉树可以变成各种各样的树,为何这里只是唯一一种树形?这里只是假设这个二叉树是由上面的变换算法得来,那么过程可逆。所以对于有右子树的二叉树树形,是不能用这种办法化为树的。
####步骤:
1.加线。如果某个结点有左孩子,那么把这个左孩子的右孩子,右孩子的右孩子,一直右下去,全部连接到这个结点。这个对应树变二叉树算法中的抹掉与长子以外的结点的连线,现在要找回自己的全部儿子。
2.去线。删除树中所有结点与这些右孩子的连线。找回了自己的儿子,不容许别人还和它们有瓜葛。
层次调整。
这里写图片描述

三:二叉树变森林

步骤:

1.递归出口:若二叉树非空,则二叉树根及其左子树作为第一棵树的二叉树形式。
2.递归:操作二叉树的右子树。即拿掉一棵树后,再对剩下的二叉树部分进行同样的操作,直到无右子树为止。
砍成一堆二叉树后,还得注意并没结束,重点不是二叉树,而是树,因此用上面的二叉树化树的算法化成森林。
这里写图片描述

四:森林变二叉树

步骤:

1.先将每一棵树化为二叉树
2.第一棵树的根作为转换后的二叉树的根
3.第一棵树的左子树作为转换后的二叉树的根的左子树
4.第二棵树作为二叉树的右子树
5.第三棵树作为二叉树右子树的右子树

这里主要运用的点是:转换为二叉树后,这个二叉树没有右子树,因此腾出右手可以接一棵新的树,因此这样可以连接很多由树化来的二叉树。

对照这个算法去想二叉树变森林,就很容易明白,先砍掉根和它的左子树作为一个整体,再对剩下的部分同样操作。
这里写图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值