数据结构--树

这些概念点来自:严慧敏 《数据结构》

树形结构是一类非常重要的数据结构;


树的一些知识点:在任意非空树种,1.有且仅有一个特定的称为根的节点,比如图(b)中的A;

2.当n>1时,其余节点可分为m个不相交的有限集T1,T2,,,,,,,Tm,其中每一个集合本身又是一棵树,称为根的子树,比如T1={B,E,F,K,L} 

一些基本术语:

1.结点:包含一个数据元素和若干指向其子树的分支。

2.结点的度:结点拥有的子树数,比如 节点B的度就是2。

3.叶子、终端结点:度为0 的结点,比如K,L,M

4.树的度:树内各结点度的最大值,比如b树的度是3

5.结点的层次:根为第一层,根的孩子为第二层,某结点在L层,那么该结点的子树的根在L+1层,双亲在同一层的结点互为堂兄弟;

6.树的深度:树中结点的最大层次称为树的深度。

7.森林:m棵互不相交树的集合,对树中每个结点,其子树的集合就是森林。







二叉树:每个结点至多只有两颗子树,并且二叉树的子树有左右之分,次序不能颠倒。

满二叉树:一颗深度为k且有2^k-1个结点的二叉树称为满二叉树,

完全二叉树:完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。









问题:1.含有N个结点的二叉链表有N+1个空链域

解释:因为N个结点一共是有2N个链域,然后链表的结构中我们可以发现一个结点上接一个链域(要么是左链域,要么是右链域),也就是说一个指针指向一个结点,所以一共有N个结点,然后因为根是没有指针指向它的,所有一共用掉的指针域就是N-1个,所以空余的就是N+1;

2.为什么叫先序遍历,中序遍历,后序遍历

解释:这个先,中,后是 遍历根的位置顺序,先序,就是先遍历根,然后再左右;中序,就是根在中间,左-根-右;后序,就是左-右-根;

3.遍历的过程是怎么样的,

解释:遍历的过程其实是一个递归的过程,不停的调用函数,比如先序遍历大概的算法是这样的:

visit(T){

printf(T->data);

visit(T->lchild);

visit(T->rchild);

}

我们看一下这样的一棵树,

它的遍历过程是:

printf(A->data);

visit(A->lchild);

visit(A->rchild);


先printf(A),然后执行visit(A->lchild),即visit(B),然后进入visit(B)函数:

printf(B->data);

visit(B->lchild);

visit(B->rchild);

执行顺序:先printf(B),进入visit(B->lchild),即visit(D)函数:

printf(D->data);

visit(D->lchild);

visit(D->rchild);

然后执行顺序:printf(D),进入printf(D->lchild),然而D->lchild为空,所以执行下一条语句visit(D->rchild)

即visit(F)函数:

printf(F->data);

visit(F->lchild);

visit(F->rchild);

然后执行顺序:printf(F),因为F->lchild,F->rchild都是为空,所以,visit执行完毕;

然后因为visit(F)执行完,即visit(D->rchild)执行完,visit(D)执行完,visit(B->lchild)执行完;

接下来执行visit(B->rchild),因为B->rchild为空,所以visit(B)执行完毕,所以进入visit(A->rchild),即visit(C);

printf(C->data);

visit(C->lchild);

visit(C->rchild);

然后执行顺序是:printf(C),然后visit(C->lchild) 即visit(E):

printf(E->data);

visit(E->lchild);

visit(E->rchild);

执行顺序:printf(E),然后因为E的左右都是空,所以visit(E)执行完毕,

然后执行visit(C->rchild),因为为空,所以visit(C)执行完毕;

至此遍历完成。

所以遍历顺序是:A-B-D-F-C-E






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值