【数据结构】第五章 树与二叉树

本文详细介绍了树的基本概念、二叉树的定义、存储结构,包括顺序和链式,以及遍历方法(先序、中序、后序和层次)。此外,还探讨了线索二叉树、哈夫曼树和森林的相关知识,展示了树和二叉树在实际应用中的实例。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1.树的基本概念

1.1 树的定义

树是n(n≥0)个结点的有限集。当n=0时,称为空树。在任意一棵非空树中应满足:

  • 有且仅有一个特定的称为根的结点。
  • 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T,T,…,Tm,其中每个集合本身又是一棵树,并且称为根的子树。

树是一种递归的数据结构。在n个结点的树中有n-1条边。

1.2 基本术语

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 树的性质

在这里插入图片描述
在这里插入图片描述

1.4 习题

在这里插入图片描述

2.二叉树的概念

2.1 二叉树的定义及其主要特性

2.1.1 二叉树的定义

与树相似,二叉树也以递归的形式定义。二叉树是n(n≥0)个结点的有限集

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

二叉树是有序树,有5种形态:
在这里插入图片描述

2.1.2 几种特殊的二叉树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.3 二叉树性质

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 二叉树存储结构

2.2.1 顺序存储结构

二叉树的顺序存储是指用一组连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为i的结点元素存储在一维数组下标为i-1的分量中。依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映结点之间的逻辑关系,这样既能最大可能地节省存储空间,又能利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。
在这里插入图片描述

2.2.2 链式存储结构

在这里插入图片描述
在这里插入图片描述

2.3 习题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.二叉树的遍历和线索二叉树

3.1 二叉树的遍历

3.1.1 先序遍历(NLR)

void Preorder (BiTree T){
     if(T!=NULL){
         visit(T);//访问根结点
         Preorder(T->lchild);//递归遍历左子树
         Preorder(T->rchild);//递归遍历右子树
     }
}

3.1.2 中序遍历(LNR)

void InOrder (BiTree T){
     if(T!=NULL){
        Inorder (T->lchild);//递归遍历左子树
        visit(T);//访问根结点
        InOrder (T->rchild);//递归遍历右子树
     }
}

3.1.3 后序遍历(LRN)

void Postorder(BiTree T){
     if(T!=NULL){
        Postorder (T->lchild);//递归遍历左子树
        Postorder(T->rchild) ;//递归遍历右子树
        visit(T);//访问根结点
     }
}

3.1.4 递归算法和非递归算法的转换

在这里插入图片描述
在这里插入图片描述

3.1.5 层次遍历

在这里插入图片描述

void Level0rder (BiTree T){
     InitQueue(Q);//初始化辅助队列
     BiTree p;
     EnQueue(Q,T);//将根结点入队
     while(!IsEmpty (Q)){//队列不空则循环
         DeQueue(Q,p);//队头结点出队
         visit(p);//访问出队结点
         if(p->lchild!=NULL)
              EnQueue(o,p->lchild);//若左孩子不空,则左孩子入队
         if(p->rchild!=NULL)
              EnQueue(Q,p->rchild);//若右孩子不空,则右孩子入队
     }
}

3.1.6 由遍历序列构造二叉树

若已知中序序列,再给出其他三种遍历序列中的任意一种,就可以唯一地确定一棵二叉树。

3.2 线索二叉树

3.2.1 线索二叉树的基本概念

规定:若无左子树,令lchild指向其前驱结点;若无右子树,令rchild指向其后继结点。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.2 中序线索二叉树的构造

在这里插入图片描述

3.2.3 中序线索二叉树的遍历

在这里插入图片描述

3.2.4 先序和后序线索二叉树的遍历

在这里插入图片描述
在这里插入图片描述

3.3 习题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.树、森林

4.1 树的存储结构

4.1.1 双亲表示法(顺序存储)

在这里插入图片描述
在这里插入图片描述

4.1.2 孩子表示法(顺序+链式存储)

在这里插入图片描述

4.1.3 孩子兄弟表示法(链式存储)

在这里插入图片描述

4.2 树、森林与二叉树的转换

4.2.1 树转换二叉树

在这里插入图片描述

4.2.1 森林转换二叉树

在这里插入图片描述

4.2.3 二叉树转换森林

在这里插入图片描述

4.3 树和森林的遍历

4.3.1 树的遍历

在这里插入图片描述

4.3.2 森林的遍历

在这里插入图片描述

4.4 习题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.树与二叉树的应用

5.1 哈夫曼树和哈夫曼编码

5.1.1 哈夫曼树的定义

在这里插入图片描述
在这里插入图片描述

5.1.2 哈夫曼树的构造

在这里插入图片描述

5.1.2 哈夫曼树的编码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2 并查集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3 习题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

㚐夵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值