7--树

来源:互联网 发布:全29雷诺进阶双40数据 编辑:程序博客网 时间:2024/06/05 15:50

定义:

树(tree)是包含n(n>0)个结点的有穷集,其中:
(1)每个元素称为结点(node);
(2)有一个特定的结点被称为根结点或树根(root)。
(3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。
树的定义具有递归性,即树中还有树

结点(Node):一个数据元素及其若干指向其子树的分支。
结点的度(degree)、树的度:结点所拥有的子树的棵树称为结点的度。树中结点度的最大值称为树的度。
叶节点或终端节点:度为0的节点称为叶节点;
非终端节点或分支节点:度不为0的节点;
双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
兄弟节点:具有相同父节点的节点互称为兄弟节点;
堂兄弟节点:双亲在同一层的节点互为堂兄弟;
节点的祖先:从根到该节点所经分支上的所有节点;
子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
森林:由m(m>=0)棵互不相交的树的集合称为森林;
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
树的高度或深度:树中节点的最大层次;

种类:

无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树;
有序树:树中任意节点的子结点之间有顺序关系,这种树称为有序树;
二叉树:每个节点最多含有两个子树的树称为二叉树;
完全二叉树
满二叉树
霍夫曼树:带权路径最短的二叉树称为哈夫曼树或最优二叉树;

二叉树
二叉树是n(n>=0)个结点的有限集合。若n=0时称为空树,否则:有且只有一个特殊的称为树的根(Root)结点;若n>1时,其余的结点被分成为两个互不相交的子集T1,T2,分别称之为左、右子树,并且左右子树都是二叉树,由此可知,二叉树的定义是递归的。
可以证明,所有树都能转为唯一对应的二叉树,不失一般性

二叉树性质

(1) 在非空二叉树中,第i层的结点总数不超过
 2i-1(指数)
, i>=1;
(2) 深度为h的二叉树最多有
 2k-1(指数)
个结点(h>=1),最少有h个结点;
(3) 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;

满二叉树:

一棵深度为且有2k -1个结点的二叉树。除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树。

完全二叉树:

深度为n个结点的二叉树,当且仅当其每一个结点都与深度为的满二叉树中编号从1n的结点一一对应。除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干结点

二叉树的存储结构

一、顺序存储结构

按二叉树的结点自上而下、从左至右编号,用一组连续的存储单元存储。

答:一律转为完全二叉树!

讨论:不是完全二叉树怎么办?

方法很简单,将各层空缺处统统补上虚结点,其内容为空

二、链式存储结构

二叉树结点数据类型定义:

typedef struct node *tree_pointer;

typedef struct node {

            int data;

            tree_pointer  left_child, right_child;

} node;







0 0
原创粉丝点击