是不是数据结构考试将近,又被二叉树相关选择题搞的一头雾水!?!
兄弟,俺来帮你嘞!!!
【本篇内容】-------------(先来瞅一瞅)
~ 1.树概念及结构
~ 2.二叉树概念,性质及结构
1.树概念及结构
1.1树的概念
树是一种非线性的数据结构,其是由n个有限结点组成的一种具有层次关系的集合;
形如此:
*有一个特殊的结点,称为根节点,根节点没有前驱结点,其余结点均具有一个前驱结点;
*每个结点都含有0个或多个后续结点
*树本身也是有一颗颗“小树”,子树组合而成,因而可知树本身是递归定义的
注:树形结构中,子树之间不能有交集,否则便不是树形结构
例如以下,均为“非树”
补充:有上述对树的描述,以及图片易发现------除了根节点外,其余结点均具有前驱结点,则容易知道N个结点的树,有N-1条边
1.2树的概念
1.3 树的表示方式
树结构,根据其本身,便要做到既要保存值域,也保存结点之间的关系;
实际树也有很多表示方式,例:双亲表示法,孩子表示法,孩子双亲表示法,以及孩子兄弟表示法等(双亲表示法,顾名思义,其找某个结点孩子容易,但是找双亲不便,孩子表示法同理)
孩子兄弟表示法,图解
2. 二叉树概念及结构
2.1 概念
* 二叉树,其实为树一个“真子集”,特在其每个结点的度最大为2;
* 由一个根节点加上两棵树,分别为左子树和右子树(均为二叉树)组成;
* 其所具有的左右节点,是有顺序之分的,次序不得颠倒;
注:对于任意二叉树都是由一下集中情况复合而成
2.2 特殊的二叉树
1.满二叉树:二叉树中的每个结点的度数均为2,即每层都达到结点的满状态
2.完全二叉树:高度为的K的完全二叉树,其K-1层为满二叉树状态,第K层,节点从左至右依次排列,例如,一个节点有右孩子,却没有左孩子,则为非完全二叉树;
下图为“非完全二叉树”和“完全二叉树”
2.3 二叉树的性质(数据上的特点,快要考试的铁铁快来瞅瞅~~~~)
1.若规定根节点的层数为1,则第i层至多有2^(i-1)个节点;
2.若规定根节点的层数为1,则整个二叉树至多有2^i - 1个节点;
(上两种特点的“至多”情况,实则也为满二叉树的特点)
3.对于任何一棵二叉树,若度为0的节点个数为n0,度为2的节点个数为n2,则一定有n0=n2+1;
证:
假设树的边数为L,节点总数为N,则一定有L=N-1;(树的特点)
再有二叉树本身,度数其实也决定了该节点后续所连边数,故有 0*n0+1*n1+2n2=N-1;
同时二叉树,N=n0+n1+n2;
两式,相减便得,n0=n2+1;(灰常有用!!!)
4.若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=log2(n+1)----以1.性质可推的
5.对于具有n个节点的完全二叉树,如果按照从上至下从左至右的数组顺序对于所有节点从0开始编号,则序号为i的节点有以下特点;
a. 若i>0,i位置节点双亲序号:(i-2)/2 (i=0时,即为根节点,无双亲)
b. 若2i+1<n,左孩子序号:2i+1,反之则无左孩子;
c. 若2i+2<n,右孩子序号:2i+2,反之则无右孩子;
附加解题小技巧:
由完全二叉树,特点可以得一个规律为:
》》当一个完全二叉树的节点数字N为奇数,无度为1的节点,N为偶数,只有一个度为1的节点。
* 运用:
在一棵具有2N节点数的完全二叉树中,求其叶子结点数(即度为0的节点树);
由二叉树的性质可得:
n0+n1+n2=2N 2N-1=n0+n1+2n2
由于节点数为偶数,由结论可知,n1=1;
化简,便可得,n0=N;
2.4 二叉树的存储结构
二叉树一般有链式存储结构和顺序存储结构;
2.4.1.顺序存储结构
该顺序存储结构,实质也就是用数组存储二叉树中节点的值域,但只能是完全二叉树。
主要也是源于N层完全二叉树,前N-1层为满二叉树的形式且第N层从左至右依次排列这一特点。
从数组的形式,转至二叉树形式,也可准确画出图像。(物理上为数组,逻辑上仍为二叉树)
如此图所示
但是“非完全二叉树” 也不是完全不能采用顺序存储形式(可将其“补为完全二叉树形式”)
如此图所示:
注:此类将非完全二叉树采用顺序存储模式,也会有弊端,例如左(或右)支树时,之后在所开辟的数组中,有效元素少,浪费了大量空间
2.4.2.链式存储形式
链式结构又分为二叉树和三叉树(红黑树);
链式存储形式即是用链表的形式实现逻辑上的二叉树。
通常的方法中链表有三个域组成,分别是数值域,左右指针域(即左右孩子所在链节点的地址)三部分;
二叉树:
三叉树(三叉树链表节点域则在二叉树基础上多了一个parent父节点指针域):