(数据结构)二叉树

此篇是另一种数据结构类型——树的一个分支,大名鼎鼎的二叉树。

一、简介

在这里插入图片描述

形如上图的数据结构叫做二叉树。
  • 最上面的那个节点A,叫做根节点

  • 一个节点,有左子树右子树,两个子树。

    A的左子树是BDEH。而E的左子树是空(或者称没有左子树),右子树是H

  • 一个节点含有的子树的根节点称为该节点的子节点

    BA的子节点。

  • 如果一个节点有子节点,那该节点称为其子的结点的父节点

    AB C的父节点。

  • 一个节点含有子树的个数称为该节点的

    A B C都是度为2的节点,E是度为1的节点。

  • 度为0的节点称为叶节点

    D H F G都是叶节点。
    ++++++

  1. 满二叉树
    在这里插入图片描述

    如果一个二叉树的节点数的层数为 k k k ,每一层节点都满足 2 k − 1 2^{k-1} 2k1 个,那就是满二叉树

  2. 完全二叉树
    在这里插入图片描述

对于一个有 k k k层的二叉树,如果其 k − 1 k-1 k1层是完全二叉树,并且其第 k k k层节点是依次从左到右按顺序的,那就是完全二叉树满二叉树是一种特殊的完全二叉树。

二、性质

  1. 一个二叉树第 k k k层,最多有 z k − 1 z^{k-1} zk1个节点

  2. 深度为 k k k的满二叉树,一共有 2 k − 1 2^k-1 2k1个节点。
    2 0 + 2 1 + 2 2 + . . . + 2 k − 1 = 2 0 ∗ 2 k − 1 2 − 1 = 2 k − 1 2^0 + 2^1 + 2^2 +...+2^{k-1}\\=2^0*\frac{2^k-1}{2-1}\\=2^k-1 20+21+22+...+2k1=20212k1=2k1

  3. n n n个节点的满二叉树,它的深度 k = l o g 2 ( n + 1 ) k = log_2(n+1) k=log2(n+1)

  4. 任意一个二叉树,如果叶节点个数为 n 0 n_0 n0,度为2的节点有 n 2 n_2 n2个,则满足 n 0 = n 2 + 1 n_0 = n_2+1 n0=n2+1

三、🪄存储结构

1) 顺序存储

  1. 用顺序表的结构来存储一个二叉树的数据,是顺序存储~~

  2. 在这里插入图片描述

  3. 对于具有 n n n个节点的二叉树,如果按照完全二叉树的结构进行编号,从 0 0 0开始,到第 n − 1 n-1 n1个 节点,则对序号为 i i i个节点:

    • 如果 i > 0 i>0 i>0,则他的父节点序号为 ( i − 1 ) / 2 (i-1)/2 (i1)/2
    • 如果 2 i + 1 < n 2i+1<n 2i+1<n,则左孩子序号为 2 i + 1 2i+1 2i+1
    • 如果 2 i + 2 < n 2i+2<n 2i+2<n,则左孩子序号为 2 i + 2 2i+2 2i+2

    因此可以将二叉树数据存储在顺序表结构中,通过该规律访问来实现二叉树。

  4. 堆的实现

2)🌟链式存储

  1. 可以利用一个双向链表的结构来存储二叉树的数据,也称二叉树的链式结构

  2. 在这里插入图片描述

  3. 通过链表中的左右指针分别对二叉树结点的左孩子和右孩子进行连接,通过指针访问来实现二叉树。

  4. 二叉树链式结构的实现

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值