非线性结构-2020 2 22 数据结构郝斌


树的的定义: 1. 有且只有一个称为根的节点
2. 有若干个互不相交的子树 这些子树本身也是一个树
通俗的说法: 树是由节点和边组成的 每一个节点只有一个父节点 但是可以有多个子节点 但有一个节点例外 该节点没有父节点 该节点称为根节点
专业术语: 节点 父节点 子节点 子孙 堂兄弟 深度:从根节点到最底层节点的层数称为深度 根节点是第一层
树的分类

  1. 一般树:任意一个节点的子节点的个数都不收限制
  2. 二叉树
    (1)一般二叉树
    (2)满二叉树 :在不增加树的层数的前提下 无法再多添加一个节点的二叉树就是满二叉树
    (3)完全二叉树:如果只是删除了满二叉树最底层最右边的连续若干个节点 这样形成的二叉树就是完全二叉树
  3. 森林:n个互不相交的树的集合
    树的存储
    1 二叉树的存储
    (1)连续存储[[完全二叉树]
    优点:查找某个节点的父节点和子节点(也包括判断有没有)
    缺点:耗用空间内存大
    (2)链式存储
    2 一般树的存储
    (1)双亲表示法 :求父节点方便 (存储的是父节点的地址)
    (2)孩子表示法:求子节点方便
    (3)双亲孩子表示法:求父节点和子节点都很方便
    在这里插入图片描述
    (4)二叉树表示法
    先得将一个普通树转化为二叉树来存储
    具体的转换方法如下: 设法保证任意一个节点的坐指针域指向它的第一个孩子节点 右指针域指向它的下一个兄弟的节点 只要能满足此条件 就可以将一个普通树转换为二叉树
    在这里插入图片描述
    3 森林的存储
    先将森林转化为二叉树 再去存储二叉树

在这里插入图片描述
二叉树操作:
1.遍历
(1)先序遍历
先访问根节点 再先序访问左子树 再先序访问右子树
在这里插入图片描述
在这里插入图片描述
(2)中序遍历
中序遍历左子树 再访问根节点 再中序遍历右子树
在这里插入图片描述
在这里插入图片描述
(3)后序遍历
后序遍历左子树
后序遍历右子树
后序遍历根节点
在这里插入图片描述

2.已知两种遍历序列可以求得原始二叉树
通过先序和中序或者中序和后序均可以推算出原始的二叉树 但是通过先序和后序是无法还原出原始的二叉树的 也就是只有通过先序和中序或是通过中序和后序才可以唯一的确定一个二叉树
这是已知先序和中序求后序
在这里插入图片描述

在这里插入图片描述
这个是已知中序和后序求先序
就是根据 后序来先找到根节点 因为在后序中根节点是放最后面的 然后根据根节点将二叉树分为两半 然后再去根据后序来判断拆开来的左子树和右子树 再来找左子树里面的根节点 依次 就可以得到你想要的最开始的二叉树了
应用
树是数据库中数据组织的一种重要的形式
操作系统子父进程的关系本身就是一棵树
面向对象语言中类的继承关系本身也是一棵树
赫夫曼树

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值