二叉树

  1. 首先二叉树为什么是我们讨论的对象,那么多叉树,比如3叉树,4叉树,5叉树。其实我也不知道为什么讨论二叉树,但是二叉树的使用范围是非常广泛的。所以我们会深入的去讲解二叉树。
  2. 二叉树为何物,即定义是什么,二叉树还有个英文名在国外叫Binary Tree.是不是非常的熟悉。首先我们要知道二叉树并不是真的树,在计算中是描述了一个数据节点持有2个子节点并且仅最多2个节点。这2个子节点是没有任何交集也就是没有任何联系,是2棵独立的节点,或者是独立的2 棵子树。
    先上图,以免说多了看晕

看图是不是每个节点的孩子节点最多为2个并且2个孩子节点都是没有任何关系的。

下面我来给二叉树下个正式的官方定义:二叉树是由n(n >=0)个有限节点的集合,从n的取值多少我们看的出这个树当n=0的时候也就是这棵树没有任何的节点我们称它为空树,如果n >= 1,这棵树是由一个根节点加上节点的2个左右子树构成,当然它的子树也会有自己的子树。

二叉树的特性

注意二叉树交换他的左右子树是不同的一棵树的。
二叉树包括左右斜树和满二叉树,完全二叉树,
满二叉树是什么呢,我们的最后一层也就是有叶子的那一层是满的节点就是说在也加不上节点了,并且除叶子那层外的层上的节点都是满的。
完全二叉树:一定要在满二叉树基础之上,我们先找到满二叉树最后一层我们可以不拿掉满二叉树的任何节点这棵树也叫完全二叉树,我们要去掉部分节点也只能从叶子节点那层并且是从右开始拿掉节点剩余的树就是完全二叉树。
二叉树的第i(i >=1)层上的节点数最多是2^(i - 1)个节点。我们看上图,假如i = 2就是在二叉树第二层上我们可以数出是BC二个节点,并且是最多的,我们在看2^(2-1) = 2^1 = 2个。其他层请自己用数据测试下,很简单。

在来谈下非常重要的性质:

## 如何根据节点编号求双亲编号 ##
补一个小知识点:我们的编号可以看成是数组索引,这样我们就可以通过编号存入内存,通过编号就可以读取和写入数据。
首先我们给二叉树从根节点开始编号,是从上到下,左到右的顺序并且是从1开始。
假如i = 1,表示这个节点就是我们二叉树的根节点,是没有双亲的,反之节点数大于1我们用i/2就是得到父亲的索引号。下面我们进行测试,假如i = 1, 那么双亲节点 = 1/2 = 0;我们没有编号为0的,说明当前节点就是根节点,而二叉树根节点是没有双亲节点的。
i >1的情况下。假如i = 3,说明是第三编号的节点,也就是根节点的右孩子,3/2 = 1,得到了他的双亲节点是1编号的,i = 2得到他的双亲节点也是1编号。那么i = 4,5,6,7,8….呢是不是也满足嗯,具体不测了。

下面我们在来讲解如何通过当前节点编号也就是顺序存储表中的索引拿到当前节点的左右孩子节点呢。我先给个计算公式假如当前节点i = 1  那么当前5编号的节点的编号就 2*i = 2,对不对呢。我先上图


我就不编号了,是不是很明显那个数值就是2号对应的2编号。那么右孩子是不是+ 1呢。i = 2i + 1 = 3;
对就是3号。那么其他值是不是也一样对的。这里要注意假如你编号是5元素,那么从二叉树上看他是没有子节点的。如果你还是用上上个公式,在程序中就出bug了。因为当我们需要得到当前节点的孩子节点之前必须做个有没有孩子节点存在的判断。很明显如果我们通过当前节点得到的左右孩子数的编号已经大于节点总数了,那肯定是没有左右孩子的。公式如下if(2i > n) (n表示数的节点数) 这个情况表示没有左孩子 反之就是有左孩子。 if((2i + 1) > n) 也是没有右孩子,反之有。

学习二叉树必须知道的基本性质相关推荐

  1. 深入学习二叉树(四) 二叉排序树

    深入学习二叉树(四) 二叉排序树 1 前言 数据结构中,线性表分为无序线性表和有序线性表. 无序线性表的数据是杂乱无序的,所以在插入和删除时,没有什么必须遵守的规则,可以插入在数据尾部或者删除在数据尾 ...

  2. python构建二叉树_BinaryTree:学习二叉树的Python库

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 简介: 您是否在为考试.作业或技术面试学习二叉树? Binarytree是一个Python库,它通过一个简 ...

  3. 深入学习二叉树(三) 霍夫曼树

    深入学习二叉树(三) 霍夫曼树 1 前言 霍夫曼树是二叉树的一种特殊形式,又称为最优二叉树,其主要作用在于数据压缩和编码长度的优化. 2 重要概念 2.1 路径和路径长度 在一棵树中,从一个结点往下可 ...

  4. 深入学习二叉树(二) 线索二叉树

    深入学习二叉树(二) 线索二叉树 1 前言 在上一篇简单二叉树的学习中,初步介绍了二叉树的一些基础知识,本篇文章将重点介绍二叉树的一种变形--线索二叉树. 2 线索二叉树 2.1 产生背景 现有一棵结 ...

  5. 二叉树的基本概念以及性质

    二叉树的基本概念以及性质 1.二叉树的定义 1.1 特殊的二叉树 2. 二叉树的性质 1.二叉树的定义 二叉树是由一个根结点和两棵称为左子树和右子树的二叉树构成,有左右的顺序之分.所以三个结点的树只有 ...

  6. 高维统计学习笔记1——LASSO和Oracle性质

    高维统计学习笔记1--LASSO和Oracle性质 主要参考资料:Sara Van De Geer<Estimation and Testing Under Sparsity> 前言 当年 ...

  7. 二叉树,满二叉树,完全二叉树 概念及其性质

    一.什么是二叉树? 1.满足本身是有序树. 2.树中包含的各个节点的度不能超过 2,即只能是 0.1 或者 2. 3.二叉树具有以下几个性质: a:二叉树中,第 i 层最多有 2的i-1次方个结点. ...

  8. 学习二叉树之SpringCloud+Spring Boot+Mybatis+ElementUI 大型企业分布式微服务云架构源码

     前言 树是数据结构中的重中之重,尤其以各类 二叉树为学习的难点.一直以来,对于树的掌握都是模棱两可的状态,现在希望通过写一个关于二叉树的专题系列.在学习与总结的同时更加深入的了解掌握二叉树.本系列文 ...

  9. 二叉树的基本概念和性质

    目录 一.树的概念和结构 1.1 树的概念 1.2 树的重要概念 1.3 树的表示​​​​​​​ 二. 二叉树概念及结构 2.1 二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉 ...

最新文章

  1. Android更换RatingBar图片 参考-Pretty RatingBar
  2. 百度地图API快速调用,一键生成百度地图
  3. 使用IDEA搭建第一个SpringBoot程序
  4. 英语语法---感叹词详解
  5. 如何得出数组里最大_相邻两数的最大差值(超巧妙解法)
  6. Android 编程下快捷图标的创建
  7. java各map中存放null值
  8. 【odoo12填坑日记】field.selection引号使用规范
  9. 微软Skype推出Slack整合预览版
  10. Android 布局
  11. PGP验证数字签名原理
  12. 使用 .reg 文件操作注册表
  13. 用windows电脑制作macos系统安装U盘
  14. 临床数据库挖掘系列3-手把手教你使用R语言对seer数据库清洗
  15. 仿支付宝支付密码输入框功能
  16. Transformer 中 Decoder 结构解读_by 弘毅
  17. 【长难句分析精讲】并列结构
  18. 人工智能的概述和入门基础
  19. Brat文本注释工具的使用文档
  20. 怎么给php加音乐,视频中添加背景音乐 怎么给视频添加背景 给视频中某段加背景音乐...

热门文章

  1. 新技能Get! 手把手教你接入CG Kit
  2. redis通过key模糊搜索_redis key模糊查找
  3. 单点登录系统中如何共享cookie
  4. Boss爬虫prd文档
  5. 微信小程序 —— 在微信小程序里面退出小程序
  6. 为什么信号源输出仅过一个电阻后,示波器测量出的输出电压会随输入频率增大而减小?----浅谈传输线分布电容与示波器的电容对信号传输的一种常见影响
  7. 云通讯这局棋,声网、容联云怎么破?
  8. c语言软件如何调字间距,sublime text2如何更改行间距和字符间距?
  9. ATL SERVER
  10. linux基因组文件,从基因组注释信息GFF文件中提取所有基因位置信息-AWK