zoukankan      html  css  js  c++  java
  • 二叉树_学习笔记

    遍历二叉树:
      前序:
        基本原理:
          先遍历所有左边的结点,然后再遍历右边的结点
        基本写法:

    void qianBian(T *er)
    {
    if(er==null)
    return;
    printf("结点:"+er->data);
    qianBian(er->left);
    qianBian(er->right);
    
    }

      中序:
        基本写法:

    void qianBian(T *er)
    {    
    if(er==null)
    return;
    qianBian(er->left);
    printf("结点:"+er->data);
    qianBian(er->right);
    
    }

      后序:
        基本写法:

    void qianBian(T *er)
    {    
    if(er==null)
    return;
    qianBian(er->left);
    qianBian(er->right);
    printf("结点:"+er->data);
    }

    树的遍历:
      1.先根遍历(先根后子)->相当于前序遍历
        ABEFCDG
      2.后根遍历(先子后根)->相当于中序遍历
        EFBCGDA
    森林的遍历:
      1.前序遍历:(每棵树使用先根遍历)
        ABCDEFGHJI
      2.后序遍历:(每棵树使用后根遍历)
        BCDAFEJHIG
    转换
      树转换成二叉树
        1.加线,在所有兄弟节点之间加一条线
        2.去线,对树中每个节点,只保留它与第一个孩子节点的连线
          删除它与其他孩子节点之间的连线
        3.层次调整,将树顺时针旋转一定的角度
      森林转为二叉树
        1.将每棵树转换成二叉树
        2.第一个二叉树的根节点不动,然后依次连接其他的根节点
        3.层次调整,将树顺时针旋转一定的角度
      二叉树转换为树
        1.加线,若某个节点的左孩子节点存在,则这个左孩子的n个
          右孩子节点都作为此节点的孩子,将该节点与这些右孩子
          节点用线连接起来
        2.去线,删除原二叉树中所有结点与其右孩子结点的连线
        3.层次调整
    二叉树转换为森林
        1.从根节点开始,若右孩子存在,则把与右孩子结点的连线
          删除,再查看分离后的二叉树,若右孩子存在,则连线删除
          直到所有右孩子连线都删除为止,得到分离的二叉树
        2.再将每棵树分离后的二叉树转换为树即可

    赫夫曼树:
      定义:
        带权路径长度WPL最小的二叉树称做赫夫曼树
      带权路径长度:
        为该节点到树根之间的路径长度与节点上权的乘积
    构造赫夫曼二叉树:
        1.先把有权的叶子简单升序排序
        2.取头两个 最小权的节点做新结点的子节点,相对小的在左节点
        3.用新结点替换原来的
        4.重复步骤2,直到没有排序节点为止

    Hold on, everything is possible.
  • 相关阅读:
    SpringMvc---Ant通配符
    mybatis 数据库语句
    shiro 静态页面资源不显示 解决方案
    http错误汇总
    关于代码质量与逻辑
    shiro 过滤属性的意义
    java思维导图
    E
    LCIS HDU
    E
  • 原文地址:https://www.cnblogs.com/student-note/p/6116764.html
Copyright © 2011-2022 走看看