【数据结构】二叉树概述

来源:互联网 发布:数据库中的罗马时间 编辑:程序博客网 时间:2024/06/05 20:06

1.树的定义

树( Tree’ )是n(n~O) 个结点的有限集。n=O 时称为空树。在任意-棵非空树中: ( 1 )有且仅有-个特定的称为根( Root )的结点: (2) 当n>1 时,其余结点可分为m (m>O) 个互不相变的有限集T1 、T2、……、Tm . 奠中每一个集合本身又是一槐树,并且称为根的子树( SubTree )

这里写图片描述

节点分类

  • 结点拥有的子树数称为结点的度(Degree) 。

  • 度为0 的结点称为叶结点(Leaf) 或终端结点;度不为0 的结点称为非终端结点或分支结点。

  • 树的度是树内各结点的度的最大值。

2.树的概念

(1)深度:树中结点的最大层次称为树的深度( Dep也)或高度

这里写图片描述

(2)树的存储结构

  • 双亲表示法

  • 孩子表示法

  • 孩子兄弟表示法

3.二叉树的定义

二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”,左子树和右子树同时也是二叉树。二叉树的子树有左右之分,并且次序不能任意颠倒。二叉树是递归定义的,所以一般二叉树的相关题目也都可以使用递归的思想来解决,当然也有一些可以使用非递归的思想解决,我下面列出的一些算法有些采用了递归,有些是非递归的。

4.二叉树的分类

(1)满二叉树

除叶子节点外,所有节点的度都为2

这里写图片描述

(2)完全二叉树

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

这里写图片描述

5.二叉树的性质

  • 二叉树中,第i层的节点最多有2(i-1)个。

  • 深度为k的二叉树最多有2k-1个节点。

  • 二叉树中,叶子节点树为N1个,度为2的节点有N2个,那么N1=N2+1。

  • 具有N个结点的二叉树深度为(Log2 N)+1层。

  • N个结点的完全二叉树如何用顺序存储,对于其中的一个结点i,存在以下关系,

    • 2*i是结点i的父结点。
    • i/2是结点i的左孩子。
    • (i/2)+1是结点i的右孩子。

6.哈夫曼树

(1)定义

哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树

(2)构建哈夫曼树

  • 1>将所有左,右子树都为空的作为根节点。

  • 2>在森林中选出两棵根节点的权值最小的树作为一棵新树的左,右子树,且置新树的附加根节点的权值为其左,右子树上根节点的权值之和。注意,左子树的权值应小于右子树的权值。

  • 3>森林中删除这两棵树,同时把新树加入到森林中。

  • 4>重复2,3步骤,直到森林中只有一棵树为止,此树便是哈夫曼树

这里写图片描述



本人才疏学浅,若有错请指出
谢谢!

原创粉丝点击