zoukankan      html  css  js  c++  java
  • 数据结构:第五章学习小结

    第五章——树和二叉树(Tree)

    一、内容小括

    1.树是一种“一对多”的非线性结构,而且有且仅有一个根结点。以及根的子树(SubTree)分为左子树和右子树。同时树也包括“空树”或只有根结点的树。

    2.树的常用结构术语:

    ①结点:树中的一个独立单元;           ②结点的度:结点所拥有的子树数。

    ③树的度:取树内各结点度的最大值; ④叶子结点:度为0的结点;

    ⑤双亲(parent)和孩子(child):结点子树根称为该结点的孩子,相应的,该结点称为孩子的双亲。

    ⑥树的深度:树中结点的最大层次。

    ⑦二叉树:子树有明确左右之分,次序不能颠倒。

    ⑧满二叉树和完全二叉树的区别:满二叉树的每一层上的结点数都是最大结点数(2^(i-1)),完全二叉树只需要每一层与满二叉树对应结点编号相同即可(顾名思义“不满”也可)。

    二、习题或作业中的实践心得

    Point 1.遍历树的次序:分为层次遍历(LevelOrder)、先序遍历(PreOrder)、中序遍历(InOrder)、后序遍历(PostOrder)。

    p.s.之前的限时测试把层次遍历和先序遍历记混了,后来默默查了书,发现:层次遍历是“从上到下,从左至右”,先序遍历虽然顺序很像,但是先序是会先将遍历到的那个结点的左右孩子遍历完,再继续往右或者往下遍历。

    树使用了递归函数的方法,例中序遍历:

    void InOrderTraversal(BiTree T)
    {//中序遍历 
        if(T)
        {
            InOrderTraversal(T->lchild);
            cout << T->data;
            InOrderTraversal(T->rchild);
        } 
    }

    其中我不小心忘记的步骤就是树申请的结点是需要释放空间的:

    void Destroy(BiTree &T)
    {
        if(T==NULL) return;//空树就返回
        
        Destroy(T->lchild);//释放左子树空间
        Destroy(T->rchild);//释放右子树空间
        delete T;//释放根结点空间 
    }

    p.s按着老师的视频思路跟着打,慢慢就会发现开始感觉陌生的“树“”写起代码来没有想象中的复杂,只是使用什么样的遍历方法需要先在书上好好了解~

    三、目标完成情况

    上周的任务自己尝试了在打完一遍老师的“带你打代码”的两道题后,自己在空闲时间尝试复现了一次。虽然有时候卡在关键算法,会希望再看一下原代码,不过这让我对这个算法记忆跟理解更加深刻一些。同时,即使会惭愧自己在一些限时训练和分组任务上的不足,但还是希望自己脚踏实地地知错就改,慢慢在学习中改进成长!

    接下来的目标:第六章的图也是虽然接触过,但以代码的方式还是会有些陌生。希望自己认真跟着课程进度进行学习,如果不会的也可以查询资源或者与同学老师讨论,以及更需要坚持的就是多打代码,学会耐心debug!

     

  • 相关阅读:
    Jmeter接口自动化-5-提取JSON响应中数组的长度
    Redis系列讲解
    jQuery.Autocomplete实现自动完成功能(详解)
    js中获得当前时间是年份和月份
    搭建SSH框架所需Jar包及其解释
    JS中把字符串转成JSON对象的方法
    JBPM数据库表说明
    java的System.getProperty()方法可以获取的值
    Mybatis3.2.3+mysql第一个例子(入门)
    多线程学习
  • 原文地址:https://www.cnblogs.com/heyi-777/p/12960817.html
Copyright © 2011-2022 走看看