二叉树及存储结构
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树及存储结构相关的知识,希望对你有一定的参考价值。
本文的结构:
- 二叉树的基本形态
- 二叉树的重要性质
- 二叉树的抽象数据类型定义
- 二叉树的存储结构
二叉树T:一个有穷的节点集合。这个集合可以为空,若不为空,则它是由根节点和称为其左子树TL和右子树TR的两个不相交的二叉树组成
二叉树的五种基本形态:
- (a) 空树
- (b) 有一个结点
- (c) 右子树为空
- (d) 左子树为空
- (e) 有左右子树
二叉树的重要性质:
- 一个二叉树第i层的最大节点数为:2i-1,i >=1;
- 深度为k的二叉树有最大结点总数为 2k-1,k>=1;
- 对任何非空二叉树T,若n0表示叶节点的个数,n2是度为2的非叶节点的个数,那么两者满足关系n0=n2+1;(如下图)
例题:有一颗二叉树,其两个儿子的结点个数为15个,一个儿子的结点个数为32个,问该二叉树的叶结点个数是多少?解:n2=15,n1=32,n0=n2+1=16;
二叉树的抽象数据类型定义
类型名称:二叉树
数据对象集:一个有穷的结点集合,若不为空,则由根节点和左右二叉子树组成
操作集:
- Boolean IsEmpty(BinTree BT):判断BT是否为空;
- void Traversal(BinTree BT):遍历,按某顺序访问每个结点
- BinTree CreatBinTree():创建一个二叉树
常见的遍历方法:
- void PreOrderTraversal(BinTree BT):先序---->根、左子树、右子树
- void InOrderTraversal(BinTree BT):中序--->左子树、根、右子树
- void PostOrderTraversal(BinTree BT):后序--->左子树、右子树、根
- void LevelOrderTraversal(BinTree BT):层次遍历--->从上到下、从左到右
二叉树的存储结构
- 顺序存储结构:(用数组实现),完全二叉树:从从上到下、从左到右顺序呢存储n个结点的完全二叉树的节点父子关系;把结点放到数组里很简单,但是如何快速的找出结点之间的关系?一般二叉树也可以采用这这种结构(将二叉树补全),但会造成空间浪费。
- 链表存储
以上是关于二叉树及存储结构的主要内容,如果未能解决你的问题,请参考以下文章