简单了解树和二叉树

来源:互联网 发布:香水时代的淘宝店怎么 编辑:程序博客网 时间:2024/06/11 15:21

树:n(n>=0)个结点的有限集。在任何一棵非空树中:
1.有且只有一个特定称为根的结点
2.n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2…..Tn,其中Ti称为树的子树。

树的结点:数据元素及若干指向其子树的分支

树的性质:递归性,层次性

一些术语的定义:
结点的度:结点拥有的子树个数
树的度:树中各结点的度的最大值
叶子(终端结点):度为零的结点
非终端结点(分支结点):度不为零的结点
结点的层次:设根结点的层次为1,第I层结点的层次为L,则第I层结点的子树根结点的层次为L+1
树的深度(高度):树中叶子结点所在的最大层次
孩子:结点子树的根称为该结点的孩子
双亲:结点就是其孩子的双亲
祖先:从根到该结点所经分支上的所有结点
子孙:以该结点为根的子树中任一结点
兄弟:同一双亲的孩子互相称为兄弟
堂兄弟:其双亲在同一层的结点互相成为堂兄弟

这里写图片描述

树的线性结构和树型结构
线性结构:第一个数据元素没有前驱,最后一个数据元素没有后继,其他元素都有一个直接前驱和一个直接后继
树型结构:根结点无前驱,所有叶子结点无后继,树中的其他结点都有一个直接前驱(双亲),多个直接后继(孩子)
这里写图片描述

有序树:树中结点的各子树从左到右有次序(不能互换)
无序树:树中结点的各子树从左到右无次序(可以互换)
森林:m(m>=0)棵互不相交的树的集合

树的表示方法:
1.树形表示法:
这里写图片描述
2.嵌套集合表示法:
这里写图片描述
3.广义表表示法:
(A(B(E,F),C(G),D(H,J,I(K))))
4.凹入表示法:
这里写图片描述

二叉树特点:
每个结点至多只有两颗子树(即二叉树中不存在度大于2的结点)
二叉树的子树有左右之分,其次序不能任意颠倒,分别称为左子树和右子树,左子树和右子树的根称为其双亲的左,右孩子

二叉树的五种不同形态:
这里写图片描述

二叉树存储结构:
顺序存储结构:用一组地址连续的存储单元依次自上而下,自左而右存储完全二叉树的结点。可通过性质5方便的求出各结点之间的关系
对一般二叉树,可将其每个结点与完全二叉树上同一位置的结点对照,存储在一维数组的相应分量中,可能对存储空间造成极大的浪费
这里写图片描述

代码表示:

#define MAX_TREE_SIZE 100typedef ElemType SqBiTree[MAX_TREE_SIZE+1];//0号单元空闲,1号单元存储根结点

链式存储结构:
1.二叉链表:

typedef struct BiTNode{    ElemType data;//数据域存储数据元素    struct BiTNode *lchild,*rchild;//两个指针域分别指向左孩子和右孩子}BiTNode,*BiTree;

这里写图片描述
eg:
这里写图片描述

三叉链表:

typedef struct TriTNode{    ElemType data;//数据域存储数据元素    struct TriNode *lchild,*rchild,*parent;//三个指针域分别指向左孩子,右孩子,双亲}TriNode,*TriTree;

这里写图片描述
eg:
这里写图片描述

原创粉丝点击