数据结构与算法之树(二叉树)理论概念

树的术语:

  1. 普通树:一个或者多个结点的集合,这些结点分为根结点和根的普通子树的子集。
  2. 结点n的双亲:树中直接在结点n上面的结点
  3. 结点n的孩子:树中直接在结点n下边的结点
  4. 根:树中没有双亲的唯一结点
  5. 叶子:树中没有孩子的结点
  6. 兄弟:树中有相同双亲的结点
  7. 结点n的祖先:从根到结点n的路径上的结点
  8. 结点n的子孙:从n到叶子结点路径上的结点
  9. 结点n的子树:由n的一个孩子和这个孩子的后代组成的树
    10.高度:从根到叶子的最长路径上的结点数


从形式上讲,普通树T是一个或者多个结点的集合,T可以划分成不相交的子集:

  • 单个结点r,即根;
  • 普通树的集合,称为r的子树。

二叉树:
从形式化描述是,二叉树是结点的一个集合T:

  • T是空集;
  • T被划分为三个不相交的子集;
    1.单个结点r,即根;
    2.两个可能为空的二叉树,成为r的左子树和右子树。
    注意:
    二叉树中每个结点的孩子不会多余两个。二叉树不是普通树的特殊类型,因为二叉树可以为空,普通树不能为空。

二叉树的直观定义:T是二叉树,如果满足1.T没有结点2.T是一个二叉树(结点r有左右子树Tl,Tr)则T 是一个二叉树。

对于每个结点n,二叉搜索树满足三个条件:

  1. n的值大于它的左子树Tl中所有结点的值;
  2. n的值小于它的右子树Tr中所有结点的值;
  3. Tl和Tr都是二叉搜索树;

**满二叉树:**在一个高度为h的满二叉树,层数小于h 的层上的所有结点都有两个孩子。
特点:

  • 叶子只能出现在最下一层;
  • 非叶子结点的度一定是2;
  • 在同样深度的二叉树中,满二叉树的结点个数一定最多,同样叶子也是最多。

**完全二叉树:**高度为h的完全二叉树是除h+1层外都是满的,并且在h层从左到右填充的二叉树。更形式化的讲,一个高度为h的二叉树T是完全二叉树,只要:
1.在h+2以及其上层的所有结点都有孩子,并且
2.当h+1层的结点有孩子时,在同一层左边所有结点都有两个孩子,并且
3.当h+1层上的结点只有一个孩子时,它是左孩子。

注意:满二叉树是完全二叉树。
特点:

  1. 叶子结点只能出现在最下两层
  2. 最下层的叶子一定集中在左部连续位置
  3. 倒数第二层,若有叶子结点,一定都在右部连续位置
  4. 如果结点度为1,则该结点只有左孩子。
  5. 同样结点数的二叉树,完全二叉树的深度最小。

二叉树的性质:

  1. 在二叉树的第i层上至多有2的(i-1)次方个结点(i>=1);
  2. 深度为K的二叉树至多有2的(k-1)次方个结点;
  3. 对任何一个二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1;
  4. 具有n个结点的完全二叉树的深度为(log2n)+1的结点按层派编号,对任何一结点i(1<=i<=n)有以下性质:
    如果i=1,则结点i是二叉树的根,没有双亲;如果i>1,则其双亲是结点(i/2);
    如果2i>n,则结点i无左孩子,否则其左孩子是结点2i;
    如果2i+1>n,则结点i无右孩子,否则其右孩子是结点2i+1;

二叉树的存储结构:二叉链表:含有一个数据域和两个指针域。

二叉树的遍历:
二叉树的遍历(traversing binary tree)是指从根节点出发,按照某种***次序***依次***访问***二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。
遍历方法:前序遍历;中序遍历;后序遍历;层序遍历;

**前序遍历:**若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,在前序遍历右子树。
**中序遍历:**若二叉树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后是访问根节点,最后中序遍历右子树。
**后序遍历:**若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点。
三种遍历方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值