数据结构(15.2)二叉树

本文介绍了二叉树的存储结构,强调了顺序存储在存储一般二叉树时的空间浪费,推荐使用链式存储。详细讲解了二叉树的初始化、创建(基于先序序列)以及恢复过程,特别是已知先序遍历和中序遍历或后序遍历恢复二叉树的方法。文章还指出恢复二叉树必须有一个中序遍历序列。
摘要由CSDN通过智能技术生成

前言

树形结构是非线性数据结构的一种,在现实生活中有着广泛应用。其中,又以二叉树的应用最为常见。

二叉树是树型结构的一种,它规定每个结点至多只有两个子树,并且子树有左右之分,不能调换次序。

这意味着,二叉树只有五种基本的形态。

img_1

具体的概念和性质就不详细说了,下面说二叉树的存储结构。

二叉树的存储结构

如果使用顺序存储结构来存储二叉树,首先要约定存储顺序是从上至下、从左至右来存储每一个结点。假如结点不存在,则用特殊的标记(如0),来表示。

可以发现,结点即使不存在,也需要耗费空间去记录这个“不存在”的状态。很显然顺序存储结构在存储完全二叉树时才有比较好的性能;拿来存储一般的二叉树则容易造成空间上的浪费。因此通常使用链式存储结构来存储二叉树。

又到了熟悉的问题:结点如何设计?同往常的链式存储一样,结点包括了数据域和指针域两个部分。不同的是,指针域有两个指针,分别指向左右孩子结点。

//结点
typedef struct BinTreeNode{
   
    //数据域
    ElemType data;
    //左孩子
    struct BinTreeNode *leftChild;
    //右孩子
    struct BinTreeNode *rightChild;
}BinTreeNode;

对整棵二叉树来说,记录了根结点,就能找到所有的结点。因此,整棵树的结构里,只需要记录一个根结点就可以了。

但是,我们需要通过输入字符串来生成一棵二叉树,要有一个特殊的标记值来表示结点不存在,以便生成正确的二叉树。因此,表示整个二叉树的结点,除了要记录根结点以外,还要记录标记值。

//整棵树
typedef struct BinTree{
   
    //根结点
    BinTreeNode *root;
    //停止的标记
    ElemType refvalue;
}BinTree;

二叉树的初始化

初始化二叉树,就是将根结点初始化为空,同时设置结束标记࿰

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值