树,森林的实现和操作以及他们的遍历

本文详细介绍了树和二叉树之间的转换规则,包括树转二叉树和二叉树转树的过程,并阐述了森林与二叉树之间的转化方法。此外,还讲解了树和森林的三种遍历方式:先根遍历、后根遍历和按层次遍历,帮助读者理解数据结构中的这些基本操作。
摘要由CSDN通过智能技术生成

一,树的实现和操作

要实现树的操作,我们需要把树转换成二叉树,再对二叉树实现操作后,再转回树,那怎么把树转换成二叉树呢,前面我们讲过了树的存储,有一种方法叫孩子兄弟法(二叉链法)

上面的树用孩子兄弟法(二叉链表)表示出来是这样:

这个图看上去和二叉树一模一样,我们用二叉树的模型表示出来就是:

 对比两个图,我们总结出来,树转换成二叉树的规律:

就是树的兄弟结点,都变成二叉树的右孩子.然后,树的兄弟结点和别的结点的联系都断了,根据这个规律,可以总结出转换的方法:

1,加线:在兄弟之间加一连线

2,抹线:对每个结点,除了其左孩子外,去除其与其余孩子之间的联系

3,旋转:以树的根结点为轴心,将整树顺时针转45度

树变二叉树:兄弟相连留长子

相反,将二叉树转换成树的方法就是:

1,加线:若p结点是双亲结点的左孩子,则将p的右孩子,右孩子的右孩子....沿分支找到的所有右孩子,都与p的双亲用线连起来

2,抹线:抹掉原二叉树中双亲与右孩子之间的连线

3,调整:将结点按层次排列,形成树结构

二叉树变树:左孩右右连双亲,去掉原来右孩线

了解了树和二叉树之间的转换后,我们对树的操作都可以转换为对二叉树的操作,那么就简单了.

二,森林与二叉树的转化

森林转化为二叉树

1,将各棵树分别转换成二叉树

2,将每棵树的根结点用线相连

3,以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树型结构

森林变二叉树:树变二叉根相连

二叉树转化为森林

1,抹线:将二叉树中根结点与其右孩子连线,及沿右分支搜索到所有右孩子间连线全部抹掉,使之变成孤立的二叉树.

2,还原:将孤立的二叉树还原成树

二叉树变森林:去掉全部右孩线,孤立二叉再还原

三,树和森林的遍历

1,树的遍历

先根(次序)遍历:若树不空,则先访问根结点,然后依次先根遍历各棵子树.

后根(次序)遍历:若树不空,则先依次后根遍历各棵子树,然后访问根结点.

按层次遍历:若树不空,则自上而下自左至右访问树中每个结点.

先根遍历:A->B->C->D->E

后根遍历:B->D->C->E->A

层次遍历:A->B->C->E->D

2,森林的遍历

将森林看作由三部分构成:

1森林中第一棵树的根结点

2森林中第一棵树的子树森林

3森林中其它树构成的森林

先序遍历:若森林不空,则:

1访问森林中第一棵树的根结点

2先序遍历森林中第一棵树的子树森林

3先序遍历森林中(除第一棵树之外)其余树构成的森林

即:依次从左至右对森林中的每一棵树进行先根遍历

中序遍历:若森林不空,则:

1中序遍历森林中第一棵树的子树森林

2访问森林中第一棵树的根结点

3中序遍历森林中(除第一棵树之外)其余树构成的森林

即:依次从左到右对森林中每一棵树进行后根遍历

 

 先序遍历:A->B->C->E->D->F->G->H->I->J

中序遍历:B->C->E->A->D->H->I->J->G->A

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值