二叉树的基本概念
Posted SOSOG的学习室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的基本概念相关的知识,希望对你有一定的参考价值。
注意:二叉树是有序树,分左右!!
二叉树的五种基本状态
几个特殊的二叉树
(1)满二叉树和完全二叉树
按层序编号,则可以通过一个结点知道其双亲结点和孩子结点的编号。
(2)二叉排序树
给定一个数字序列,构造二叉排序树。
(3)平衡二叉树
二叉树的性质
完全二叉树的性质
二叉树的存储结构
顺序存储结构
注:用顺序存储方式数组下标最好从1开始,这样才能利用完全二叉树的性质。
依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映结点之间的逻辑关系,这样既能最大可能地节省存储空间,又能利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。
但对于一般的二叉树,为了让数组下标能反映二叉树中结点之间的逻辑关系,只能添加一些并不存在的空结点,让其每个结点与完全二叉树上的结点相对照,再存储到一维数组的相应分量中。然而,在最坏情况下,一个高度为h且只有h个结点的单支树却需要占据近2^h-1个存储单元。
链式存储结构
由于顺序存储的空间利用率较低,因此二叉树一般都采用链式存储结构,用链表结点来存储二叉树中的每个结点。在二叉树中,结点结构通常包括若干数据域和若干指针域,二叉链表至少包含3个域:数据域data、左指针域lchild和右指针域rchild。
定义二叉链表的结点
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode, *BiTree;
二叉链表的操作
链式存储如果要找到指定结点p的左右孩子很简单,但找到双亲结点的则只能从根结点开始遍历寻找。看哪个结点的lchild或rchild指针是指向p结点的。
如果经常要访问双亲结点,就要加一个双亲指针,构成三叉链表
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild,*parent;
}BiTNode,*BiTree;
以上是关于二叉树的基本概念的主要内容,如果未能解决你的问题,请参考以下文章