数据结构:树的基础

本文详细介绍了数据结构的概念及八大常用数据结构,重点讲解了树这一数据结构,包括其定义、特性、术语及其特殊形式——二叉树。文章还探讨了二叉树的基本形态和遍历方法,并通过实例演示如何根据前序和中序遍历结果还原二叉树。
摘要由CSDN通过智能技术生成

数据结构:八大类型数据结构

什么是数据结构:数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。

常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:
在这里插入图片描述

树:

​ 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

  1. 每个节点有零个或多个子节点;
  2. 没有父节点的节点称为根节点;
  3. 每一个非根节点有且只有一个父节点;
  4. 除了根节点外,每个子节点可以分为多个不相交的子树;
    5.在这里插入图片描述

然后你要知道一大堆关于树的术语:度,叶子节点,根节点,父节点,子节点,深度,高度。

结点:树的结点由数据元素及其若干分支组成

树和子树(subtree):以根结点为根的树为全树(或树),以其他结点作为根结点的树为子树

结点的度:结点的度指的是结点分支的个数

树的度:选取所有结点中最大的度就是树的度

叶子结点(leaf node):度为0的结点就是叶子结点,它位于树最深层,并且树只要非空,就一定存在叶子结点。

分支结点(internal node):度大于0的结点为分支结点,显然除了叶子结点之外的结点都为分支结点。而且根结点也是分支结点

父节点(father node)和子结点(child node):

一个结点若干分支下的结点都为该结点的子结点(或称孩子(children)),并且,该结点称为子结点的父节点

层次(level)

树是一个递归结构,所以也有层次这种概念,由层次也会引发出树的深度,就好像递归也有深度一样。结点的层次为从结点到根结点的路径中边的条数,并且认为根结点的层次为0,因为根结点到自身的路径中边的条数为0,结点的层次有时也称为结点的深度(depth)

树的深度:

与树的度对应于结点的度一样,树的深度也是选取结点中的最大深度(或最大层次

在日常的应用中,我们讨论和用的更多的是树的其中一种特殊结构,就是二叉树

什么是二叉树:

二叉树是树的特殊一种,具有如下特点:

1、每个结点最多有两颗子树,结点的度最大为2。
2、左子树和右子树是有顺序的,次序不能颠倒。
3、即使某结点只有一个子树,也要区分左右子树。

二叉树是一种比较有用的折中方案,它添加,删除元素都很快,并且在查找方面也有很多的算法优化,所以,二叉树既有链表的好处,也有数组的好处,是两者的优化方案,在处理大批量的动态数据方面非常有用。

二叉树有很多扩展的数据结构,包括平衡二叉树、红黑树、B+树等,这些数据结构二叉树的基础上衍生了很多的功能,在实际应用中广泛用到,例如mysql的数据库索引结构用的就是B+树,还有HashMap的底层源码中用到了红黑树。

二叉树的五种基本形态:

在这里插入图片描述

二叉树的遍历方式:

https://leetcode-cn.com/leetbook/read/data-structure-binary-tree/xe17x7/

笔试题:已知二叉树前序遍历为:ABDEGHCF,中序遍历为:DBGEHACF,求后序遍历

分析:

  1. 首先我们由前序遍历可知根节点为A
  2. 已知根节点为A,由中序遍历可知左子树为DBGEH,右子树为CF

确定这两点后就很容易推算出原来的二叉树的样子了。
我们看到右子树节点为CF,中序遍历也是CF,那么就可以推断出现在的二叉树右边是这个样子:
在这里插入图片描述

为什么F不是左子树呢,因为如果F在左边,中序遍历的顺序就变成FC了

由前序遍历AB可以知,A的左子树肯定是B,那么现在的树就是这样的:
在这里插入图片描述

再由中序遍历DB可知,D为B的左子树
在这里插入图片描述

现在只剩下EGH没确定了
首先我们要确定的是D肯定没有子树,如果有,中序遍历就不会是DB了
由前序遍历可知E节点只能是B的右子树了
在这里插入图片描述
最后由中序遍历GEH可知完整的二叉树为:

在这里插入图片描述
这题答案 后序遍历就出来了:DGHEBFCA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值