名词解释
二叉树的先序建立(递归):
输出:
(1)每个元素称为节点
(2)有一个特定的节点被称为根节点或树根
(3)除根节点外的其余数据元素被分为m个互不相交的集合T1,T2,T3.....Tm-1,其中每一个集合Ti本身也是一个树,被称作原树的子树
节点的度:一个节点含有子树的个数称为该节点的度
叶节点或终端节点
:度为0的节点称为叶节点
非终端节点或分支节点:度不为0的节点
双亲结点或父节点:若一个节点含有子节点,则这个节点称为其子节点的一个父节点
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点
兄弟节点:具有相同父节点的节点互称为兄弟节点
树的度:一棵树中,最大的节点的度称为树的度
节点的层次:从根开始定义起,根为第一层,根的子节点为第二层,以此类推
树的高度或深度:树中节点的最大层次
森林:由m颗互不相交的树的集合称为森林
二叉树:
二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。
二叉树的链式存储结构:
名词解释
(1)每个元素称为节点
(2)有一个特定的节点被称为根节点或树根
(3)除根节点外的其余数据元素被分为m个互不相交的集合T1,T2,T3.....Tm-1,其中每一个集合Ti本身也是一个树,被称作原树的子树
节点的度:一个节点含有子树的个数称为该节点的度
叶节点或终端节点
:度为0的节点称为叶节点
非终端节点或分支节点:度不为0的节点
双亲结点或父节点:若一个节点含有子节点,则这个节点称为其子节点的一个父节点
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点
兄弟节点:具有相同父节点的节点互称为兄弟节点
树的度:一棵树中,最大的节点的度称为树的度
节点的层次:从根开始定义起,根为第一层,根的子节点为第二层,以此类推
树的高度或深度:树中节点的最大层次
森林:由m颗互不相交的树的集合称为森林
二叉树:
二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。
二叉树的链式存储结构:
typedef struct BiTNode{
int data;
struct BitNode *rchild, *lchild;
}BiTNode, *BiTree;
二叉树的先序建立(递归):
void CreateBiTree(BiTree &T){
char data;
scanf("%c", &data);
if(data == '#'){
T == NULL;
}
else{
T = (BiTree)malloc(sizeof(BiTNode));
T -> data = data;
CreateBiTree(T -> lchild);
CreateBiTree(T -> rchild);
}
输出:
void Visit(BiTree &T){
if(T -> data != '#'){
printf("%c", T -> data);
}
}
先序遍历:
首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,
然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。
例如,下图所示二叉树的遍历结果是:ABDECF
void PreOrder(BiTree &T){
if(T != NULL){
Visit(T);
PreOrder(T -> lchild);
PreOrder(T -> rchild);
}
}
中序遍历:
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。
如右图所示
二叉树
中序遍历结果:DBEAFC
void InOrder(BiTree &T){
if(T != NULL){
InOrder(T -> rchild);
Visit(T);
InOrder(T -> lchild);
}
}
后序遍历:
后序遍历先遍历左子树,然后遍历右子树,最后访问根节点,在遍历左子树、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根节点
void PostOrder(BiTree T){
if(T != NULL){
PostOrder(T -> lchild);
PostOrder(T -> rchild);
Visit(T);
}
}