第五章数据结构--树--学习小结

这两周我们主要学到了有关树和二叉树的用法,掌握了二叉树的遍历的基本操作,但是对一些具体题目来说,还是觉得有点难以上手。

树的介绍

1. 树的定义

树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

(01) 每个节点有零个或多个子节点;
(02) 没有父节点的节点称为根节点;
(03) 每一个非根节点有且只有一个父节点;
(04) 除了根节点外,每个子节点可以分为多个不相交的子树。

2. 树的基本术语

若一个结点有子树,那么该结点称为子树根的"双亲",子树的根是该结点的"孩子"。有相同双亲的结点互为"兄弟"。一个结点的所有子树上的任何结点都是该结点的后裔。从根结点到某个结点的路径上的所有结点都是该结点的祖先。

结点的度:结点拥有的子树的数目。
叶子:度为零的结点。
分支结点:度不为零的结点。
树的度:树中结点的最大的度。

层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1。
树的高度:树中结点的最大层次。
无序树:如果树中结点的各子树之间的次序是不重要的,可以交换位置。
有序树:如果树中结点的各子树之间的次序是重要的, 不可以交换位置。
森林:0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林。

二叉树的介绍

1. 二叉树的定义

二叉树是每个节点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空

2. 二叉树的性质

二叉树有以下几个性质:
性质1:二叉树第i层上的结点数目最多为 2{i-1} (i≥1)。
性质2:深度为k的二叉树至多有2{k}-1个结点(k≥1)。
性质3:包含n个结点的二叉树的高度至少为log2 (n+1)
性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1

遍历

这里讲解前序遍历中序遍历后序遍历3种方式。

1.前序遍历

若二叉树非空,则执行以下操作:
(01) 访问根结点;
(02) 先序遍历左子树;
(03) 先序遍历右子树。

前序遍历代码

void preorder_bstree(BSTree tree)
{
    if(tree != NULL)
    {
      cout<<tree->data;
        preorder_bstree(tree->left);
        preorder_bstree(tree->right);
    }
}

2.2 中序遍历

若二叉树非空,则执行以下操作:
(01) 中序遍历左子树;
(02) 访问根结点;
(03) 中序遍历右子树。

2.中序遍历代码

void inorder_bstree(BSTree tree)
{
    if(tree != NULL)
    {
        inorder_bstree(tree->left);
  cout<<tree->data;
inorder_bstree(tree->right); } }

2.3 后序遍历

若二叉树非空,则执行以下操作:
(01) 后序遍历左子树;
(02) 后序遍历右子树;
(03) 访问根结点。

3.后序遍历代码

void postorder_bstree(BSTree tree)
{
    if(tree != NULL)
    {
        postorder_bstree(tree->left);
        postorder_bstree(tree->right);
  cout<<tree->data;
} }

做题时遇到的困难:例如在做树的同构这道题目时,虽然知道基本的思路,但是在实际敲代码的时候,将几个算法整合在一起时常常会遇到困难,在BuildTree函数中经常报错,导致无法将所有的数据输入,整个程序就停止运行了。

解决方法:借鉴班上同学发布的博客,认真阅读,理解他的思路,最终发现自己少了个循环输入!还好及时解决了。

下周目标:认真复习有关图的知识,巩固上节课老师讲过的知识点,进而解决PTA上面的题目,同时多找一些题目练手。

原文地址:https://www.cnblogs.com/liuzhhhao/p/10810489.html

时间: 2024-10-31 15:10:44

第五章数据结构--树--学习小结的相关文章

第五章 前端开发学习——Boostrap

第五章 前端开发学习--Boostrap 一.Bootstrap基础 二.Bootstrap布局 三.Bootstrap组件 四.Bootstrap插件 一.Bootstrap基础 什么是Bootstrap(what): 由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架 简洁.直观.强悍的前端开发框架,让web开发更迅速.简单. Bootstrap版本: Bootstrap2.Bootstrap3.Bootstrap4 Bootstra

第五章数据结构总结

实践第一题的一段代码 int Isomorphic(int root1,int root2)   {   //用递归结构判断     if(root1==-1 && root2==-1)         return 1;       //若都为空树,则同构    if((root1==-1 && root2!=-1) || (root1!=-1 && root2==-1))        return 0;      //一颗为空,一颗不为空则不同构   

2018-06-21 中文代码示例视频演示Python入门教程第五章 数据结构

知乎原链 续前作: 中文代码示例视频演示Python入门教程第四章 控制流 对应在线文档: 5. Data Structures 这一章起初还是采取了尽量与原例程相近的汉化方式, 但有些语义较偏(如Trondheim的hammer dance). 鉴于这一教程的目的在于使人尽量快速入门Python, 而任何不熟悉的词汇都会加上不必要的负担. 于是最终决定不拘泥于与原例程的"形似", 而采取在例程中使用更为国人熟知的词汇了. 中文代码示例Python入门教程 5.1 列表详述_哔哩哔哩

高性能MySQL之【第十五章 备份与恢复】学习记录

  我们不打算包括的话题: 安全(访问备份,恢复数据的权限,文件是否需要加密) 备份存储在哪里,包括他们应该离源数据多远,以及如何将数据从源头移动到目的地 保留策略.审计.法律要求,以及相应的条款 存储解决方案和介质,压缩,以及增量备份 存储的格式 对备份的监控和报告 存储层内置备份功能,或者其他专用设备,例如预制式文件服务器 还原意味着从备份文件中获取数据,可以加载这些文件到MySQL里,也可以将这些文件放置到MySQL期望的路径中.恢复一般意味着当某些异常发生后对一个系统或者其部分的拯救,包

《C#高级编程》【第五章】泛型 -- 学习笔记

 泛型是高级程序设计语言的一种特性.泛型的引入使得程序开发的效率得到提高,代码的重用性大大的提升.有了泛型,我们可以创建独立于被包含类型的类和方法,我们不必给不同的类编写功能相同的很多方法或者类,只创建一个方法或类就可以了.现在我们看看泛型的优点 性能上,泛型不需要进行类型转换(也就是拆箱和装箱). 类型安全,和Object类相比,Object类属于非类型安全的,而泛型使用泛型类型,可以根据需要用特定的类型替换泛型类型,这样就保证了类型安全类.在编译时,只有与泛型类型T定义的允许使用的类型不

第五章内容小结

在第五章,我们学习了树这个数据结构,并且学习了其定义.遍历等操作,最后还学习了哈夫曼树. 一.树的遍历 树的遍历操作有以下三种: 1.先序遍历(根,左孩子,右孩子) void PreOrderTravel(node t[], int x) { cout << t[x].name << " "; if(t[x].lch!=-1) PreOrderTravel(t, t[x].lch); if(t[x].rch!=-1) PreOrderTravel(t, t[x]

第五章学习小结

---恢复内容开始--- 第五章主要学习的是树与二叉树,有利用数组进行存储的顺序二叉树,也有利用链表进行存储的链式二叉树,在这个基础上又展开了二叉树的遍历. 二叉树的遍历分为前序遍历,中序遍历以及后序遍历,主要区别在于遍历的顺序不同. 前序遍历: (1)访问根结点. (2)前序遍历左子树. (3)前序遍历右子树 . 中序遍历: (1)中序遍历左子树 (2)访问根结点 (3)中序遍历右子树 后序遍历: 1)后序遍历左子树 (2)后序遍历右子树 (3)访问根结点 对于二叉树树的遍历的应用: 给定两棵

数据结构 第一章学习小结

数据结构   第一章学习小结 1.数据结构第1章的心得体会: 这周学习了数据结构的绪论及第一章.初步了解了数据结构与算法的相关概念,一开始看书看视频时觉得还挺抽象的,不能够完全理解.但是反复多看了几遍之后,结合例题,自己去操作去跑代码,慢慢觉得容易理解接受起来了.由于现在以网课形式进行教学,老师上课的同时基本还是靠自己去理解学习.当然老师也发挥很大的作用,比如让我们更深入的了解递归的空间复杂度为什么与问题规模有关,又怎样去找到该函数的临界值等等.既锻炼了我们深入思考的能力,也让我们更加清楚了解不

第5章学习小结

第五章主要学习了树的知识,以前一直很好奇,为什么电脑能存储像树一样的数据结构,学完才发现,ADT加数组或者ADT加链表真的可以衍生出多种多样的数据类型,以下做出本章小结: 1.利用ASCII码实现不同类型的数据的转换,如:int = char - ‘0’. 2.学会了利用bool类型标记找出所需数据类型,如找根节点,先将bool型数组初始化成false,输入过的节点标记为true,那么为false的即为根节点. 3.树的四种遍历方式:利用递归实现三种遍历方式 先序: void PreOrderT