回 帖 发 新 帖 刷新版面

主题:[讨论]数据结构学习笔记--树

一、定义:
是一种递归定义的数据结构。树( Tree )是树结构的简称,它是一种重要的非线性数据结构。树或者是一个空树,即不含有任何的结点(元素),或者是一个非空树,即至少含有一个结点。
二、相关术语:
结点 (node) :表示树中的元素,包括数据项及若干指向其子树的分支。
结点的度 (degree) :树中的一个结点拥有的子树数称为该结点的度 (Degree) 。
叶子 (leaf) :度为 0 的结点。
孩子 (child) :结点子树的根称为该结点的孩子。
双亲 (parents) :孩子结点的上层结点。
兄弟 (sibling) :同一双亲的孩子。
树的度 :一棵树中最大的结点度数。
结点的层次 (level) :从根结点算起,根为第一层,它的孩子为第二层……。
深度 (depth) :树中结点的最大层次数。
有序树: 子树的位置自左向右有次序关系的称为有序树,顺序决定了大小,孩子的次序不能改变。
无序树: 子树的位置自左向右无次序关系的称为无序树。
森林: (Forest) 是 m(m≥0) 棵互不相交的树的集合。树和森林的概念相近。删去一棵树的根,就   得到一个森林;反之,加上一个结点作树根,森林就变为一棵树。
路径 :若树中存在一个结点序列 k1 , k2 , … , ki ,使得 ki 是 ki+1 的双亲 (1≤i<j) ,则称该结点序列是从 k1 到 kj 的一条路径 (Path) 或道路。
路径的长度: 指路径所经过的边 ( 即连接两个结点的线段 ) 的数目,等于 j-1 。
祖先: 若树中结点 k 到 ks 存在一条路径,则称 k 是 ks 的 祖先 (Ancestor) , ks 是 k 的 子 孙 (Descendant) 。结点 k 的祖先和子孙不包含结点 k 本身。
树的高度:树中结点的最大层数称为树的高度 (Height) 或深度 (Depth) 。很多文献中将树根的层数定义为 0 。
二叉树 :指数的度为 2 的有序树。是最简单的一种树结构,在计算机领域有着广泛的应用。
满二叉树: 深度为 K 且含有 2K -1 个结点的二叉树,当树中的每一层都满时成为漫二叉树。
完全二叉树: 在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者在最右边缺少连续若干个结点,则称此树为完全二叉树。
三、基本操作:
构造空树T:InitTree(&T)
销毁树T:DestroyTree(&T)
按Definition构造树T :CreateTree(&T,definition)
将树T清为空树:ClearTree(&T)
判断T树是否为空: TreeEmpty(T)
返回T的深度:TreeDepth(T)
返回T的根:Root(T)
返回T中cur_e结点的值:Value(T,cur_e)
为T中的cur_e结点赋值value:Assign(T,cur_e,value)
返回cur_e结点的父结点:Parent(T,cur_e)
返回非叶子结点cur_e的最左孩子:LeftChild(T,cur_e)
返回cur_e的右兄弟:RightSibling(T,cur_e)
在T中p指结点的第i棵子树插入C:InsertChild(&T,&p,I,c)
删除T中p所指结点的第i棵子树:DeleteChild(&T,&p,i)
按某种次序对T的每个结点调用函数visit()一次且至多一次。一旦visit失败,则操作失败
四、储存结构:
顺序储存(二叉树):
#define MAX TREE SIZE 100
Typedef TElemType SqBlTree[MAX_TREE_SIZE];
SqblTree bt;
链式储存(二叉树):
Typedef struct BiTNode{
TELemType data;
Struct BiTNode *lchild.*rchild;//左右孩子指针
}BiTNode,*BiTree;
参考资料:      
   数据结构C语言版(电子版):作者-严慰民
   树和二叉树:http://wlkc.open.ha.cn/rjb/sjjg/gnsy/index5.asp

回复列表 (共2个回复)

沙发

当然有用了,这是基础。一定要学好的,对你以后编程有很大帮助的。

板凳


呵呵,谢谢啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册