【数据结构】二叉树概述
来源:互联网 发布:数据库中的罗马时间 编辑:程序博客网 时间: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步骤,直到森林中只有一棵树为止,此树便是哈夫曼树
本人才疏学浅,若有错请指出
谢谢!
- 【数据结构】二叉树概述
- 数据结构概述 第五章 二叉树
- 二叉树概述
- 数据结构-树-二叉树
- 数据结构::树,二叉树
- 数据结构-二叉树
- 二叉树的数据结构
- 数据结构-二叉树算法
- java数据结构:二叉树
- 数据结构---二叉树
- 数据结构(C++)--二叉树
- JAVA 数据结构 二叉树
- 数据结构-二叉树 问题
- 转贴:数据结构:二叉树
- 二叉树(数据结构 c++)
- 数据结构-二叉树操作
- java数据结构----二叉树
- 数据结构二叉树
- Java入门学习-Hello Spring Boot
- Q128:PBRT-V3,“体渲染”积分器的“传播方程”(15.1章节)
- Java语法基础之循环控制
- Python2.7.13中文乱码问题
- Activity
- 【数据结构】二叉树概述
- C++效率
- Android-auto如何大举进军车载系统
- water problem(线段树 容易)
- Java构建工具:Ant vs Maven vs Gradle
- Flask生成验证码(中英文都存在)
- Big Integer Addition
- TFS更换本地映射路径
- 安装XAMPP登陆localhost出现的问题