数据结构——二叉树

二叉树

二叉树的定义

二叉树在一般的树上加了两个限制条件:

  • 每个结点最多只有两个子树
  • 子树有左右之分,不能颠倒

二叉树的形态

  • 空二叉树
  • 只有根结点
  • 只有左子树,右子树为空
  • 只有右子树,左子树为空
  • 既有左子树,又有右子树

满二叉树、完全二叉树以及非完全二叉树

  • 满二叉树:所有的分支结点都有左、右子节点,并且所有叶子结点都集中在最下层的二叉树。
  • 完全二叉树:对一棵深度为k、有n个结点二叉树编号后,各节点的编号与深度为k的满二叉树相同位置的结点的编号相同,这颗二叉树就被称为完全二叉树
  • 非完全二叉树:没有满足完全二叉树中的条件的二叉树
image

二叉树的主要性质

  • 非空二叉树上叶子结点数等于双分支结点(有两个分支的结点)数加1

  • 总结点数 = 叶子结点数 + 单分支结点数 + 双分支结点数 = 单分支结点数 + 2*双分支结点数

  • 总分支数 = 总结点数 - 1 (此性质对所有树都成立,并非只是二叉树

  • 空指针数 = 所有结点数 + 1

  • 二叉树第i层最多2^(i-1)个结点,其中i>=1

  • 深度为k的二叉树最多有2^k - 1个结点

  • 有n个结点的完全二叉树,对各结点从上到下、从左到右编号。若i为某结点a的编号(范围1~n)。

    • 若i不等于1,则a父结点的编号为不超过(i/2)的最大整数
    • 若2i<=n,则a左儿子的编号为2i; 若2i>n,则a无左儿子
    • 若2i+1<=n,则a的右儿子编号为2i+1;若2i+1>n,则a无右儿子
  • 给定n个结点,能构成二叉树种树如下
    C_{2n}^{n}/(n+1)

  • 具有n个结点的二叉树深度如下
    \lfloor log_2n \rfloor + 1

二叉树的储存结构

顺序储存结构

顺序储存结构用一个数组来存放一棵二叉树,这种方式最适合完全二叉树

定义如下

int Tree[1024]; //顺序结构的二叉树

若某结点编号为i,且存在左儿子和右儿子,则他们分别对应

Tree[i*2];  //左儿子
Tree[2*i+1];    //右儿子

链式储存结构

定义如下

typedef struct _BtTree{
    
    int data;
    struct _BtTree *leftchild;
    struct _BtTree *rightchild;
    
}BtTree;

推荐阅读更多精彩内容

  • 树的基本概念 树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树 在任意一颗非空树中: 根(Root)...
    鼬殿阅读 243评论 0 0
  • 首先,我们来讲讲什么是树: 树是一种非线性的数据结构,相对于线性的数据结构(链表、数组)而言,树的平均运行时间更短...
    C语言Plus阅读 1,172评论 0 0
  • 一、树的基本概念 树:是由结点或顶点和边组成的(可能是非线性的),且不存在着任何环的一种数据结构。没有结点的树称为...
    Dezi阅读 192评论 0 4
  • 1:Some基本概念 一种非线性数据结构,一对多,有分支和层级结构,分为一般树,和常用的二叉树,类比树,公司组织架...
    土豆骑士阅读 297评论 0 0
  • 树,是一种在实际编程中经常遇到的数据结构。它的逻辑很简单,除根节点之外,每个节点只有一个父节点,根节点没有父节点。...
    doudo阅读 573评论 0 0
  • 0x01概述 什么是二叉树?二叉树是 n (n >= 0)个结构的有限集合,改集合或者为空集(称为空二叉树),或者...
    Pino_HD阅读 427评论 0 0
  • 关于树的定义和存储结构可以查看上一篇文章树的定义和树的三种存储结构 一、二叉树的定义 二叉树的定义 二叉树(Bin...
    NotFunGuy阅读 1,694评论 5 25
  • 1. 树(Tree) (1) 基础概念 1> 节点 节点、根节点、父节点、子节点、兄弟节点 2> 树、子树 一棵树...
    流萤的分享阅读 63评论 0 0
  • 树 一棵树可以没有任何节点称为空树,可以只有一个节点root一棵树可以分为多个子树组合,二叉树有左子树、右子树。节...
    Super曲江龙Kimi阅读 174评论 0 0
  • 术语 节点的度:一个节点含有的子树的个数称为该节点的度; 叶节点或终端节点:度为零的节点; 非终端节点或分支节点:...
    Reinelili阅读 399评论 0 1
  • 二叉树的基本概念 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(leftsubtree)和“右...
    LittlePy阅读 238评论 0 0
  • 定义 一个有穷的结点集合,可以为空。若不为空,则它是由根结点和称为其左子树和右子树的两个互不相交的二叉树组成。 二...
    IAM四十二阅读 2,208评论 0 2
  • 以前上数据结构的时候看着老师敲,并没有亲自去把整个实现和相关操作都实现,只记得一些。导致在进行剑指offer练习的...
    蚂蚁未归阅读 77评论 0 0
  • 在《大话数据结构》一中有这样一段话“无论多高大的树,那也是从小到大的,由根到叶,一点点成长起来的,俗话说十年树木,...
    翀鹰精灵阅读 1,099评论 0 2
  • 简单地理解,满足以下两个条件的树就是二叉树: 本身是有序树; 树中包含的各个节点的度不能超过 2,即只能是 0、1...
    飞扬code阅读 1,060评论 0 4
  • Substrate的transaction-payment模块分析 transaction-payment模块提供...
    建怀阅读 7,440评论 0 4
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 5,305评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 6,366评论 0 2
  • 今天上午陪老妈看病,下午健身房跑步,晚上想想今天还没有断舍离,马上做,衣架和旁边的的布衣架,一看乱乱,又想想自己是...
    影子3623253阅读 2,526评论 2 8
  • 年纪越大,人的反应就越迟钝,脑子就越不好使,计划稍有变化,就容易手忙脚乱,乱了方寸。 “玩坏了”也是如此,不但会乱...
    玩坏了阅读 1,815评论 2 1