数据结构-------树

树的介绍

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

  • 树的度:
    节点拥有的子树的数目为节点的度
    度为0的节点为叶子节点或者终端节点
    度不为0的节点称为非终端节点或者分支节点
    树各节点的度的最大值称为树的度

  • 结点的层次和树的深度
    结点的层次从根开始定义
    树中结点的最大层次称为树的深度或者高度

  • 父亲,儿子,兄弟
    父亲:一个结点的直接前驱结点
    儿子:一个结点的直接后继结点
    兄弟:同一个父亲节点的其他节点

二叉树

  • 满二叉树:
    高度为k, 有2的k次方减1个节点满二叉树中每个节点都达到最大的数,即每一层都是满的,因此称为满二叉树

  • 完全二叉树:
    若一个棵满二叉树中,再最下层从右侧起去掉相邻的若干叶子节点,得到的二叉树即为完全二叉树

  • 满二叉树必定是完全二叉树,二完全二叉树不一定时满二叉树

二叉树具有以下五个性质:

  • 在二叉树的第i(i>=1)层最多有2^(i - 1)个结点。
  • 深度为k(k>=0)的二叉树最少有k个结点,最多有2^k-1个结点。
  • 对于任一棵非空二叉树,若其叶结点数为n0,度为2的非叶结点数为n2,则n0 = n2 +1。
  • 具有n个结点的完全二叉树的深度为int_UP(log(2,n+1))。

二叉树的存储结构可以是:顺序存储结构,链式存储结构。

二分搜索树

  • 一颗二叉树
  • 二分搜索树的每个节点的值:
    每个节点的值都大于其左子树的所有节点的值
    每个节点的值都小于其右子树的所有节点的值
  • 每一颗子树也是二分搜索树
  • 存储的元素必须有可比较性, Java中的话就要求二分搜索树保存的数据类型要实现Comparable接口, 或者使用额外的比较器实现
  • 一般二分搜索树不包含重复元素, 当然也可以定义包含重复元素的二分搜索树
  • 二分搜索树天然的具有递归特性
    在这里插入图片描述

树的遍历

树的遍历一般都是左边比右边先遍历,那么就以遍历根的顺序来判断有三种:先序,中序,后序
在这里插入图片描述

  • 先序:
    根左右
    根==>左子树==>右子树
    28,16,13,22,30,29,42

  • 中序:
    对于二分搜索树的中序遍历是一个有序的
    左子树==>根==>右子树
    13,16,22,28,29,30,42

  • 后序
    左子树==>右子树==>根
    13,22,16,29,42,30,28

考点

在先序,中序,后序中如果知道了其中的:(先序、中序) 或者 (中序,后序),那么就可以求到另外的一个序列

=========================================
比如:
先序:28,16,13,22,30,29,42
中序:13,16,22,28,29,30,42
在这里插入图片描述
通过两个序列可以得出:
1、通过先序的第一个28为根
2、可以通过查看到16为左子树的根,30为右子树的根
在这里插入图片描述

==================================================

程序操作树

  • 先序遍历的递归程序
    在这里插入图片描述

  • 中序遍历的递归程序
    在这里插入图片描述

  • 后序遍历的递归程序
    在这里插入图片描述

  • 分搜索树是否包含一个元素
    在这里插入图片描述

  • 创建一个二分搜索树
    在这里插入图片描述

  • 二叉树的非递归的先序遍历
    需要借助于栈的结构实现,因为栈有先进后出的特点
    在这里插入图片描述

  • 二叉树的层次遍历
    层次遍历需要借助到队列来实现这个层次遍历
    在这里插入图片描述

链接

https://www.jianshu.com/p/912357993486
https://www.cnblogs.com/songwenjie/p/8955856.html#%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%88%9B%E5%BB%BA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值