声明:文章为博主原创,转载请联系博主。文章若有错误和疏漏之处,还望大家不吝赐教!
第一章:数据结构与算法基础
===========================================================---------------------------
本章重点内容为:
1.数据结构基础与线性表:下三角矩阵元素存储位置计算、队列的特性应用、栈的特性应用一二三四
2.广义表:无
3.树:二叉树的特性、二叉树的遍历、哈夫曼树
4.图:边与顶点的关系
5.查找与排序:折半查找、基数排序算法以及这些算法的性能分析
6.算法基础知识:时间复杂度分析
===========================================================
本篇文章主要介绍二叉树的特性。
一.概念介绍
===========================================================---------------------------
首先我们来简单了解一下什么是二叉树。在计算机科学中,二叉树是每个结点最多有两个子树的树结
构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉
查找树和二叉堆。
相关术语:
树的结点(node):包含一个数据元素及若干指向子树的分支;
孩子结点(child node):结点的子树的根称为该结点的孩子;
双亲结点:B 结点是A 结点的孩子,则A结点是B 结点的双亲;
兄弟结点:同一双亲的孩子结点; 堂兄结点:同一层上结点;
祖先结点: 从根到该结点的所经分支上的所有结点
子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙
结点层:根结点的层定义为1;根的孩子为第二层结点,依此类推;
树的深度:树中最大的结点层
结点的度:结点子树的个数
树的度: 树中最大的结点度。
叶子结点:也叫终端结点,是度为 0 的结点;
分枝结点:度不为0的结点;
有序树:子树有序的树,如:家族树;
无序树:不考虑子树的顺序;
二叉树的分类:
===========================================================---------------------------
满二叉树:除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层,即:一棵深度为k,且
有2^k-1个结点的二叉树,称为满二叉树。
完全二叉树:若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第
h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。简单理解:
把满二叉树的最后一层叶子结点从右向左依次去掉若干个,得到的就是完全二叉树。有
一点需要注意:满二叉树也属于完全二叉树。
平衡二叉树:平衡二叉树又被称为AVL树(区别于AVL算法),是一棵二叉排序树,且具有以下性质:
它是一棵空树,或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都
是一棵平衡二叉树。
图示:
a:空二叉树
b:只有一个根节点的二叉树
c:只有左子树的二叉树
d:只有右子树的二叉树
e:完全二叉树,其中左侧的是完全二叉树中的满二叉树
二. 二叉树性质
(1) 在非空二叉树中,第i层的结点总数不超过,i>=1;
(2) 深度为h的二叉树最多有 个结点(h>=1),最少有h个结点;
(3) 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
(4) 具有n个结点的完全二叉树的深度为 (注:[ ]表示向下取整)
(5) 有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:
若I为结点编号则 如果I>1,则其父结点的编号为I/2;
如果2*I<=N,则其左孩子(即左子树的根结点)的编号为2*I;若2*I>N,则无左孩子;
如果2*I+1<=N,则其右孩子的结点编号为2*I+1;若2*I+1>N,则无右孩子。
(6) 给定N个结点,能构成h(N)种不同的二叉树。h(N)为卡特兰数的第N项。h(n)=。
(7) 设有i个枝点,I为所有枝点的道路长度总和,J为叶的道路长度总和J=I+2i