十大排序已经告一段落,接下来小软将与同学们一起学习一种新的结构——二叉树

一、树

在谈二叉树前,小软先和同学们谈下树和图的概念

树:不包含回路的连通无向图(树是一种简单的非线性结构)

树有着不包含回路这个特点,所以树就被赋予了很多特性

1、一棵树中任意两个结点有且仅有唯一的一条路径连通

2、一棵树如果有n个结点,那它一定恰好有n-1条边

3、在一棵树中加一条边将会构成一个回路

4、树中有且仅有一个没有前驱的结点称为根结点

在对树进行讨论的时候将树中的每个点称为结点,

根结点:没有父结点的结点

叶结点:没有子结点的结点

内部结点:一个结点既不是根结点也不是叶结点

每个结点还有深度,比如上图左边的树的4号结点深度是3(深度是指从根结点到这个结点的层数,根结点为第一层)

二、二叉树

首先,我们来说一下二叉树的基本概念:

二叉树是一种非线性结构,二叉树是递归定义的,其结点有左右子树之分

二叉树的存储结构:

二叉树通常采用链式存储结构,存储结点由数据域和指针域(指针域:左指针域和右指针域)组成。

二叉树的链式存储结构也称为二叉链表,对满二叉树和完全二叉树可按层次进行顺序存储

它的特点有这些:

1、每个结点最多有两颗子树

2、左子树和右子树是有顺序的,次序不能颠倒

3、即使某结点只有一个子树,也要区分左右子树

4、二叉树可为空,空的二叉树没有结点,非空二叉树有且仅有一个根节点

二叉树中有两种特殊的二叉树:满二叉树、完全二叉树

满二叉树:二叉树中每个内部结点都有存在左子树和右子树(或者说满二叉树所有的叶结点都有同样的深度)

满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树

(满二叉树的严格的定义是:一颗深度为h且有2h-1个结点的二叉树)

完全二叉树:

第一种解释:如果一颗二叉树除最右边位置上有一个或几个叶结点缺少外,其他是丰满的那么这样的二叉树就是完全二叉树(这句话不太好理解),看下面第二种解释

第二种解释:除第h层外,其他各层(1到h-1)的结点数都达到最大个数,第h层从右向左连续缺若干结点,则这个二叉树就是完全二叉树

也就是说如果一个结点有右子结点,那么它一定也有左子结点

第三种解释:除最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的若干结点

完全二叉树的形状类似于下图

(小软的个人理解:完全二叉树就是从上往下填结点,从左往右填,填满了一层再填下一层)

接下来我们来看看二叉树相关词语解释吧:

结点的度:结点拥有的子树的数目

叶子结点:度为0的结点(tips:在任意一个二叉树中,度为0的叶子结点总是比度为2的结点多一个)

分支结点:度不为0的结点

树的度:树中结点的最大的度

层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1

树的高度:树中结点的最大层次

二叉树基本性质:

性质1:在二叉树的第k层上至多有2k-1个结点(k>=1)

性质2:在深度为m的二叉树至多有2m-1个结点

性质3:对任意一颗二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个

性质4:具有n个结点的完全二叉树的深度至少为[log2n]+1,其中[log2n]表示log2n的整数部分

存储方式

存储的方式和图一样,有链表和数组两种,用数组存访问速度快,但插入、删除节点操作就比较费时了。实际中更多的是用链来表示二叉树(下面的实现代码使用的是链表)

具体代码实现如下:

上面的代码采用的是以前序遍历方式输入二叉树,当输入“#”时,指针指向NULL,说明是改结点是叶结点。

二叉树是不是很有意思呢,不要走开下期更加精彩。

下期再见喽~

部分图片来源于网络

责任编辑:付子腾   毛丽颖

二叉树的基本特性和二叉树的几种基本操作的机制_笃学不倦|二叉树(一)相关推荐

  1. 二叉树的基本特性和二叉树的几种基本操作的机制_深入理解二叉树01 二叉树基础

    数据结构是所有的程序员就业过程中无法回避的知识,最近在回顾数据结构的内容,因此会不定期的推出一些数据结构的文章,分享自己的笔记. 树是数据结构中的重点,由于二叉树又是树中的重中之重.二叉树的应用也非常 ...

  2. 二叉树的基本特性和二叉树的几种基本操作的机制_关于二叉树,你该了解这些!...

    我们要开启新的征程了,大家跟上! 说道二叉树,大家对于二叉树其实都很熟悉了,本文呢我也不想教科书式的把二叉树的基础内容在啰嗦一遍,所以一下我讲的都是一些比较重点的内容. 相信只要耐心看完,都会有所收获 ...

  3. 二叉树第i层中的所有结点_讲透学烂二叉树(二):图中树的定义amp;各类型树的特征分析...

    日常中我们见到的二叉树应用有,Java集合中的TreeSet和TreeMap,C++ STL中的set.map,以及Linux虚拟内存的管理,以及B-Tree,B+-Tree在文件系统,都是通过红黑树 ...

  4. 二叉树为空意味着二叉树_我是怎么调试出来二叉树的遍历(超精彩配图),从此遍历不再愁了...

    推荐学习 牛掰!"基础-中级-高级"Java程序员面试集结,看完献出我的膝盖 数据结构与算法,程序员必过的坎?不掌握一定挤不进BATJ的神技? 我是怎么调试出来二叉树的遍历(超精彩 ...

  5. 浅谈mysql 平衡二叉树理解_浅析二分查找,二叉树,平衡二叉树,B树,B+树

    二分查找 二分查找是最基本的,后面的二叉树,平衡二叉树,B树,B+树都是基于二分查找演变而来的. 二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,但它有一个 ...

  6. java二叉树原理_史上最全二叉树遍历详解(Java实现,原理相同)

    二叉树遍历方法合集: 最近在LeetCode力扣上刷数据结构的二叉树合集,遇到的二叉树遍历方法,于是想理解透彻.本文讲解了二叉树遍历的四种方法,前.中.后序遍历. 对应题目: 94.二叉树的中序遍历 ...

  7. 01 二叉树的BFS(广度、层次或水平遍历实现)【Binary Tree 二叉树】

    二叉树的遍历分为BFS和DFS两种大类 下面完整实现BFS遍历二叉树 * 例如二叉树* 1* / \* 2 3* /\* 4 5 BFS遍历结果:1-2-3-4-5 具体的代码实现: 方法一.采用递归 ...

  8. 对于二叉树三种非递归遍历方式的理解

    利用栈实现二叉树的先序,中序,后序遍历的非递归操作 栈是一种先进后出的数据结构,其本质应是记录作用,支撑回溯(即按原路线返回):因此,基于其的二叉树遍历操作深刻的体现了其特性: 若后续的输入和其前面的 ...

  9. 带父节点的平衡二叉树_深入理解(二叉树、平衡二叉树、B-Tree、B+Tree )的区别

    一.背景 一般说MySQL的索引,都清楚其索引主要以B+树为主,此外还有Hash.RTree.FullText.本文简要说明一下MySQL的B+Tree索引,以及和其相关的二叉树.平衡二叉树.B-Tr ...

最新文章

  1. (转)mq经验总结-转
  2. 题目1148:Financial Management
  3. 产品问答 | 入职一家公司,你的选择依据是什么?
  4. 使用PIE/PIF值判断DVD刻录机的刻录品质
  5. nginx 知识点 :ctx_index and index
  6. 仿网易云音乐客户端的底部播放器的实现思路
  7. 29. ExtJs - Struts2 整合(1) - 登录页面
  8. pyspark与jupyter集成
  9. C++——《算法分析》实验伍——箱子装载问题
  10. .net通用权限框架B/S (五)--WEB(1)首页
  11. U盘文件系统FAT32转为NTFS
  12. SSM框架的详细介绍
  13. 还记得儿时的那片海么?
  14. OneNote如何同步到OneDrive,并且如何在PC和手机上完美使用OneNote
  15. 获取本机局域网IP地址
  16. 丧尸,只要摧毁头部便会永久停止行动
  17. LeetCode46:全排列(八皇后)
  18. 使用 Power Query 制作工资条
  19. 关于“发现在互联网状态下的生活时间流逝很快的分析”
  20. 基于微信小程序的评选投票系统软件的设计与实现毕业论文

热门文章

  1. PowerShell让系统可以执行.ps1文件
  2. MapReduce实现倒排索引(类似协同过滤)
  3. postgresql数据库的数据导出
  4. 解决Mysql复制Relay log read failure 的问题
  5. 测试Servlet生命周期学习笔记
  6. cent os 6 fdisk fat32
  7. 刚刚写了一个评星的脚本插件,分享给大家
  8. BS-XX-020基于SSM实现停车位租赁系统
  9. JavaWeb核心之Servlet
  10. C#参考之方法参数关键字:params、ref及out