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.
  • 相关阅读:
    推荐两个漂亮的编程字体【华为云技术分享】
    【云速建站】几个基本概念和流程解释【华为云技术分享】
    Too many open files的四种解决办法【华为云技术分享】
    基于Docker快速搭建ELK【华为云技术分享】
    重磅!普惠AI--华为云语音语义万次调用1元购,有奖问答@评论区等你来!【华为云技术分享】
    图库网站Unsplash高清原图爬虫【华为云技术分享】
    冒泡的问题及阻止冒泡
    封装可视区域大小的函数
    点击空白处隐藏案例
    计算滚动条的高度
  • 原文地址:https://www.cnblogs.com/student-note/p/6116764.html
Copyright © 2011-2022 走看看