提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、树的概念
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结

前言

树是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由 n(n>0)个有限节点组成一个具有层次关系的集合。

一、树的各种概念

满足树的条件:

1、有且仅有一个根节点

2、其余的节点可以分为m个互不相交的有限集合

1. 度数

一个节点的子树的个数称为该节点的度数,一棵树的度数是指该树种节点的最大度数

2. 树叶

度数为0的节点

3. 深度(高度)

节点的层数等于父节点的层数加1,根节点的层数定义为1,把树种节点层数的最大值称为该树的深度或者高度

4. 边数

一个节点系列k1,k2, ……,ki,ki+1, ……,kj,并满足ki是ki+1的父节点,就称为一条从k1到kj的路径,路径的长度为j-1,即路径中的边数

5. 二叉树

 5.1概念

二叉树是n个节点的有限集合,它或者是空集,或者是由一个根节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成

注意:二叉树严格区分左孩子和右孩子,即使只有一个子节点也要区分左右

5.2 特征

1、二叉树最多有两个子节点

2、严格区分左子树和右子树

5.3 二叉树的性质

  1. 二叉树第i(i>=1)层上的节点最多为2i-1个
  2. 深度为k(k>=1)的二叉树最多有2k-1个节点

总节点的个数:n = 2^0+2^1+2^2 +……+2^(k-1)

2n = 2^1+2^2+……2^(k-1)+2^k

两个相减:n = 2k-1

3、在任意二叉树中,树叶的数目比度数为2的数目多1:

所有节点的个数为n = 所有的子节点的个数+1(根节点)

度数为0的节点的个数为n0,它的子节点的个数为0

度数为1的节点的个数为n1,它的子节点的个数为n1

度数为2的节点的个数为n2,它的子节点的个数为2n2

n = 0+n1+2n2+1

n0+n1+n2 = 0+n1+2n2+1

n0 = n2+1

案例:2、具有10个叶节点的二叉树有(B )个度数为2的节点

A.8    B.9     C.10    D.11

5.4二叉树的遍历

解题思路:一般来说,会给出一个前序遍历的结果或者一个后序遍历的结果,再给出一个中序遍历的结果,求另外一个遍历结果。

先看前/后序遍历,可以的出根是谁,再看中序看根左边有谁右边有谁,轮换着看,知道最后画出相应的图。

二、使用步骤

1.引入库

代码如下(示例):

//创建树的根结点
Tree *createTree(data_type item)
{Tree *pBoot = NULL;pBoot = (Tree *)malloc(sizeof(Tree));if(NULL == pBoot){perror("malloc error");return NULL;}memset(pBoot,0,sizeof(Tree));pBoot->data = item;return pBoot;
}
//向数中插入数据
int insertTree(Tree *pBoot,data_type item)
{//1.入参判断if(NULL == pBoot){return PBOOTNULL;}//2.创建一个新节点Tree *pNew = (Tree *)malloc(sizeof(Tree));if(NULL == pNew){perror("malloc error");return MALLOCERROR;}memset(pNew,0,sizeof(Tree));pNew->data = item;//3.插入while(1){//判断pNew是左孩子还是右孩子if(pNew->data < pBoot->data){//左孩子if(pBoot->lChild != NULL){pBoot = pBoot->lChild;}else{pBoot->lChild = pNew;return OK;}}else{//右孩子if(pBoot->rChild != NULL){pBoot = pBoot->rChild;}else{pBoot->rChild = pNew;return OK;}}}
}//中序遍历
void midOrder(Tree *pBoot)
{if(NULL == pBoot){return ;}midOrder(pBoot->lChild);printf("%d ",pBoot->data);midOrder(pBoot->rChild);
}

2.读入数据

代码如下(示例):

int main(void)
{int i;data_type arr[20] = {54,26,33,42,98,77,88,12,5,18};Tree *pBoot = createTree(arr[0]);for(i = 1; i < 10; i++){insertTree(pBoot,arr[i]);}midOrder(pBoot);printf("\n");return 0;
}

总结

学习树这一块,主要是把概念记清楚,并记住遍历的方式等。这一块的代码并不难写,还需要加深学习。

关于树的一些学习心得相关推荐

  1. 我的MYSQL学习心得(十六) 优化

    原文:我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看 ...

  2. c语言节点有指针域数据域,学习心得:链表的操作(C语言实现)

    今天将给大家讲述链表的学习心得.学习数据结构,毋庸置疑链表必须学好,后面的栈.队列.树.图都是以链表为基础的:链表的种类很多,有单链表.双链表.循环链表.非循环链表:在此,我们以非循环单链表为例,来讲 ...

  3. 数据科学学习心得_学习数据科学时如何保持动力

    数据科学学习心得 When trying to learn anything all by yourself, it is easy to lose motivation and get thrown ...

  4. string 转 json_手写Json解析器学习心得

    哦?从"{"开始,看来是个对象了! 一. 介绍 一周前,老同学阿立给我转了一篇知乎回答,答主说检验一门语言是否掌握的标准是实现一个Json解析器,网易游戏过去的Python入门培训 ...

  5. 计算机90学时培训小结,90学时培训学习心得体会

    人道是课难上,复习课更难上.此话着实不假,我在日常教学过程中也深有体会.毋庸讳言,本人在日常教学过程中抑或自以为是--重复知识点加练习,习题加点评,抑或面对复习课一脸茫然,尤其是面对如何上出高效.新颖 ...

  6. ACM学习心得(5000字)

    ACM学习心得 姓名:  邓华伟          学号: 20163940           专业班级:计算机1班 转眼之间,一个学期就这么过去了,ACM课程也圆满的落下了帷幕,经过这一学期的学习 ...

  7. 《数据结构与算法 Python语言实现》书评与学习心得

    做为Python小白,本人几个月前读完了Mark Lutz的1400页巨著<Learning Python>(太TM啰嗦了,读过的请举手),本打算继续学习下一步<Programmin ...

  8. 神经网络程序设计学习心得

    神经网络程序设计学习心得 简枢 SB16225001   本学期有幸再次选择了孟宁老师的2016年秋-网络程序设计课程.该课程主要聚焦于神经网络程序设计,基于深度学习神经网络等机器学习技术实现一个医学 ...

  9. android中级培训,Android 中级学习心得

    不知不觉一个月又过去了,中级部分已经学习完毕,给大家讲讲学习心得,希望对新人有所帮助,中级部分主要是一些控件的设置,以及实现一些控件的功能. Android通知系统,Tostask 比较常用:进度条p ...

最新文章

  1. Unicode编码问题,编程方面的技巧集合
  2. Linux下配置SSL (转)
  3. 路由器无服务器无响应是怎么回事啊,wifi服务器无响应怎么解决(图文)
  4. 在DataGridView中添加行号
  5. VC中实现GCC的2个比较常用的位运算函数
  6. CentOS 安装MySQL rpm方式安装
  7. ASA防火墙外部web应用端口与默认审查协议相冲突的解决方法
  8. 用commons-fileupload-1.2 实现文件上传
  9. mysql 事务 for update_mysql事务,select for update,及数据的一致性处理
  10. 在家办公这半年,让我开始热爱生活
  11. Java中的形参和实参的区别以及传值调用和传引用调用
  12. 【Elasticsearch】java 客户端 获取 termvectors 词频 统计
  13. 学习记录012-NFS
  14. java lang runtimeexception什么意思_Java基础之异常
  15. python必背代码-让你的python代码优雅地道的小技巧
  16. 调试内存_如何调试Python 程序的内存泄露问题
  17. typeScrip(三) 类
  18. 工地小哥逆袭转行程序员的真实故事
  19. weico.android批量转发,weico android|Weico新浪微博3.3.5 客户端_手机软件
  20. FBReader阅读引擎支持的功能

热门文章

  1. 随感 | 毕设风雨 | 前端之路 | 暗夜与旅人 | 早槐与龙鲤
  2. 移动端和前端开发的共性
  3. win10 右键新建卡顿
  4. 腾讯云游戏云服务器具有哪些优点
  5. word2016修改批注名字
  6. 学习笔记-Volatility
  7. Python sum()函数
  8. 微软中国CTO:手机里装的App一上网基本等于裸奔
  9. Leetcode 1905. Count Sub Islands
  10. 如何激发员工的积极性