【数据结构】二叉树的基本形态和存储结构

 


前言

之前在博客【数据结构】树的基本认识https://blog.csdn.net/Jacky_Feng/article/details/108435094中已经介绍了树的基本的概念,也知道了树的结构其实是多种多样,但其中二叉树是最基础,最常用的一种结构。


一、二叉树的定义

1.定义

二叉树是n(n≥0)个结点的有限集合:

① 或者为空二叉树,即n=0。

② 或者由一个根结点和两个互不相交的被称为根的左子树 和右子树组成。左子树和右子树又分别是一棵二叉树。

2.特点

① 每个结点最多有两棵子树,即二叉树不存在度大于2的结点。

② 二叉树的子树有左右之分,其子树的次序不能颠倒。


二、二叉树结构

1.二叉树的五种基本形态

  • 1.空树

  • 2.只有一个根结点

  • 3.根结点只有左子树

  • 4.根结点只有右子树

  • 5.根结点既有左子树又有右子树

2.特殊的二叉树

  • 1.斜树

①左斜树:所有的结点只有左子树

②右斜树:所有的结点只有右子树

特点:每层只有一个结点,结点的个数等于二叉树的深度

  • 2.满二叉树

定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。

特点:①所有的非终端结点都存在左右子树,并且所有的叶子结点都在最下面一层

          ②非叶子结点度一定为2

          ③同一深度的二叉树中,满二叉树的结点数最多,叶子结点数最多

  • 3.完全二叉树

定义:对一棵树具有n个结点的二叉树按层次编号,当且仅当其每一个结点都与同深度的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。

特点:①叶子结点只能出现在最下面两层

           ②最下层的叶子结点一定集中于左部连续位置

           ③如果结点的度为1,则该结点只有左孩子,即不可能存在只有右孩子的情况

           ④相同结点数的二叉树中,完全二叉树的深度最小

 


三、二叉树的性质

  • 1.非空二叉树上叶子结点数等于度为2的结点数加1

  • 2.非空二叉树上第K层上至多有2^k−1个结点(K≥1)

  • 3.高度为H的二叉树至多有2^H-1个结点(H≥1)

  • 4.具有N个(N>0)结点的完全二叉树的高度为 [log2(N+1)]或[log2N] +1。

  • 5.对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0 = n2+1。

    一棵二叉树,除了终端结点(叶子结点),就是度为1或2的结点。假设n1度为1的结点数,则数T 的结点总数n=n0+n1+n2。我们再换个角度,看一下树T的连接线数,由于根结点只有分支出去,没有分支进入,所以连接线数为结点总数减去1。也就是n-1=n1+2n2,可推导出n0+n1+n2-1 = n1+2n2,继续推导可得n0 = n2+1。


四、二叉树的存储结构 

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构

  • 顺序存储

    • 二叉树的顺序存储结构就是用一组地址连续的存储单元(数组)依次自上而下、自左至右存储完全二叉树上的结点元素。

    • 顺序结构存储适合表示完全二叉树,因为不是完全二叉树会有空间的浪费(尤其是斜树)。而现实中使用中只有堆才会使用数组来存储。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树

  • 链式存储

  • 用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。链式结构又分为二叉链和三叉链。

链表结点:每个结点包含一个数据域和两个指针域

二叉链和三叉链

二叉链表和三叉链表结点代码如下(示例):

// 二叉链
struct BinaryTreeNode
{
struct BinTreeNode* _pLeft; // 指向当前节点左孩子
struct BinTreeNode* _pRight; // 指向当前节点右孩子
DataType _data; // 当前节点数据域
}
// 三叉链
struct BinaryTreeNode
{
struct BinTreeNode* _pParent; // 指向当前节点的双亲
struct BinTreeNode* _pLeft; // 指向当前节点左孩子
struct BinTreeNode* _pRight; // 指向当前节点右孩子
DataType _data; // 当前节点数据域
};

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.栈和队列的共同特点是(只允许在端点处插入和删除元素) 4.栈通常采用的两种存储结构是(线性存储结构和链表存储结构) 5.下列关于栈的叙述正确的是(D) A.栈是非线性结构B.栈是一种树状结构C.栈具有先进先出的特征D.栈有后进先出的特征 6.链表不具有的特点是(B)A.不必事先估计存储空间 B.可随机访问任一元素 C.插入删除不需要移动元素 D.所需空间与线性表长度成正比 7.用链表表示线性表的优点是(便于插入和删除操作) 8.在单链表中,增加头结点的目的是(方便运算的实现) 9.循环链表的主要优点是(从表中任一结点出发都能访问到整个链表) 10.线性表L=(a1,a2,a3,……ai,……an),下列说法正确的是(D) A.每个元素都有一个直接前件和直接后件 B.线性表中至少要有一个元素 C.表中诸元素的排列顺序必须是由小到大或由大到小 D.除第一个和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件 11.线性表若采用链式存储结构时,要求内存中可用存储单元的地址(D) A.必须是连续的 B.部分地址必须是连续的C.一定是不连续的 D.连续不连续都可以 12.线性表的顺序存储结构和线性表的链式存储结构分别是(随机存取的存储结构、顺序存取的存储结构) 13.树是结点的集合,它的根结点数目是(有且只有1) 14.在深度为5的满二叉树中,叶子结点的个数为(31) 15.具有3个结点的二叉树有(5种形态) 16.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为(13) 17.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是(cedba) 18.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为(DGEBHFCA) 19.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是(gdbehfca) 20.数据库保护分为:安全性控制、 完整性控制 、并发性控制和数据的恢复。 1. 在计算机中,算法是指(解题方案的准确而完整的描述) 2.在下列选项中,哪个不是一个算法一般应该具有的基本特征(无穷性) 说明:算法的四个基本特征是:可行性、确定性、有穷性和拥有足够的情报。 3. 算法一般都可以用哪几种控制结构组合而成(顺序、选择、循环) 4.算法的时间复杂度是指(算法执行过程中所需要的基本运算次数) 5. 算法的空间复杂度是指(执行过程中所需要的存储空间) 6. 算法分析的目的是(分析算法的效率以求改进) ............ .................
二叉树是一种重要的数据结构,由于其特殊的结构和性质,需要具备一些基本的操作来对二叉树进行处理。 首先是创建二叉树。可以通过读取用户输入或者其他方式来构建一个二叉树。创建二叉树的过程可以使用递归的方式,通过不断地输入节点的值和连接关系来构造二叉树。 其次是遍历二叉树。常见的遍历方式有前序遍历、中序遍历和后序遍历。前序遍历先访问根节点,然后遍历左子树和右子树;中序遍历按照左子树、根节点和右子树的顺序遍历;后序遍历先遍历左子树和右子树,最后访问根节点。通过递归的方式,可以实现这三种遍历方式。 另外一个常用的操作是查找二叉树中的节点。可以通过比较节点的值,逐层搜索二叉树,找到目标节点。如果目标节点不存在,可以返回一个特定的值来表示找不到。 还有一个重要的操作是插入节点。可以通过比较节点的值,找到插入的位置。如果待插入的节点小于当前节点,就插入到左子树中;如果待插入的节点大于当前节点,就插入到右子树中。插入节点后,需要调整二叉树的结构,保持二叉树的性质。 最后,删除节点也是一个常见的操作。删除节点时,需要考虑节点的左右子树。可以通过将节点的左子树的最大节点或者右子树的最小节点上移来替代被删除的节点。删除节点后,同样需要调整二叉树的结构,保持二叉树的性质。 这些是二叉树基本操作,它们在实际应用中有广泛的应用,比如在搜索、排序和图等领域。掌握这些操作,可以更好地理解和应用二叉树

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值