zoukankan      html  css  js  c++  java
  • 树-森林、树、二叉树的转换

    一、概念

      由于二叉树是一种比较确定的数据结构,因此操作它比较简单,但是由于一般树的结构并不固定,因此操作起来非常麻烦,我们可以将一般树转换成二叉树,以二叉树的形式来存储一般树,当程序需要一般树时,再将二叉树转换成一般树。

      森林:如果将一颗一般树的根节点去掉,这棵树就变成了森林,其实森林就是有多个根节点的树。

    二、树的转换:

      a、多叉树向二叉树转换的方法:

      1、加虚线:同一个父节点的相邻兄弟节点之间的虚线

       2、抹实线:每节点只保留它与最左子节点的连线,与其他子节点的连线被抹掉。

      3、虚改实:虚线改成实线

     结论:

      红虚线就是新增的父子关系,因此多叉树转换成二叉树的关键思路就是:所有子节点只保留左节点,其他子节点转为左节点的右子节点链。

      b、因此森林也可以转换为二叉树:

      森林如下:

    转换成的二叉树为:

      

      c、二叉树转换为多叉树

        1、加虚线:若某节点I是父节点的左子节点,则将该节点I的右孩子链的所有节点分别与节点I的父节点添加连线

        2、抹线:把有虚线的节点与原父节点的连线抹去

        3、整理:虚改实,并按层排列

     

      d、二叉树转换成森林

        如果二叉树的根节点有右子节点-右子节点就代表是根节点的兄弟节点,这种情况会转换得到森林。

        如果二叉树的根节点的右子节点链只有一个节点,那么转换出来的森林将只有两棵树;如果二叉树的根节点的右子节点链有N个节点,那么转换出来的森林就有N+1棵树。

      

  • 相关阅读:
    条件概率-独立事件-互斥事件-对立事件
    数学
    可视化:svg相关基础
    移动端调用摄像头(相机)相册
    移动端的事件点透及原因
    ios滑动流畅(丝般顺滑)滚动
    动画框架基础部分
    css美化select标签,兼容ie10 ie10+,chrome。但不支持ie9 ie9-
    ie11 调试工具不能使用
    css使用
  • 原文地址:https://www.cnblogs.com/television/p/8454407.html
Copyright © 2011-2022 走看看