数据结构与算法(十)树和森林

森林

        m(m≥0)棵互不相交的树的集合

树的存储结构

        双亲表示法:使用结构数组实现,包含两个域->数据域双亲域(双亲结点在数组中的位置;根的双亲结点位置表示为-1)

RABCDEFGHK
-1000113666

                特点:找双亲容易,找孩子难

        孩子链表:将每个结点的孩子用单链表存储(n个结点有n个单链表,叶子结点是空表),再将所有单链表的头指针组成数组存储(上图链表表示如下)

        孩子兄弟表示法(二叉链表表示法)

                每个结点由两个指针域分别指向第一个孩子结点下一个兄弟结点

        树和二叉树的转换

                使用二叉链表作为媒介可以导出树和二叉树之间的对应关系

                树->二叉树

                        1.加线:在兄弟之间加连线

                        2.抹线:对每个结点,除左孩子外,去除其他孩子之间的关系

                        3.旋转:以根为轴心,将树顺时针转45°

                 二叉树->树

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

                        2.抹线:抹掉原二叉树双亲结点和右孩子的连线

                        3.调整:按层重新排列

 森林与二叉树之间的转换

        森林->二叉树

                1.将每棵树分别转换为二叉树

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

                3.以第一颗树的根为二叉树的根进行顺时针旋转

         二叉树->森林

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

                2.还原:将孤立二叉树全部还原成树

 树的遍历

        先根遍历:先访问根结点,再依次遍历子树

        后根遍历:先一次后根遍历各子树,然后访问根结点

        层次遍历:从上到下从左到右依次访问

 森林的遍历

        从左到右对森林中的每一颗树进行先根遍历/后根遍历

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值