树的合集-数据结构导论

概念

数是由n(n≥0)个节点组成的有限集合(记作T)
其中如果n=0,那么他是一棵空树,这是树的特例
如果n>0,这n个节点中存在(且仅有)一个节点作为树的根节点。简称为根节点,其余节点可分为m(m≥0)个互不相交的非空集合T1 T2 T3…Tm,其中每个子集本身又是一棵符合定义的树,称为根节点的子树。
节点的度:树上任意节点所拥有的子树的数目称为该节点的度。
叶子:度为0的结点,称为叶子或终端结点。
树的度:一颗树中所有结点的度的最大值,称为该树的度。
一个结点的子树的根称为该结点的孩子。相应的该节点称为孩子的双亲。
结点的层次:从根开始算起,跟的层次为1,其余结点的层次为其双亲的层次加1。
树的高度:一颗树中所有结点层次数的最大值成为该树的高度或深度。
有序树:若树中各结点的子树从左到右是有次序的,不能互换。称为有序数,有序树中左边子树的根称为第1个孩子,左边第i个子树的根称为第i个孩子。
无序树:若树中各节点的子树是无次序的,可以互换,则称为无序树。

错题:

1.

如果节点A有2个兄弟节点,结点B为A的双亲,则节点B的度为: 3

2.

棵树的节点个数最少为:0

3.算法设计题:以二叉链表作存储结构,试写出二叉链表的结构类型定义,并编写求二叉树叶子节点个数的算法。

二叉链表的结构类型定义如下:

typedef struct btnode
{
	DataType data;
	struct btnode *lchild, *rchild
}* BinTree

求二叉树叶子结点个数的算法如下;

int leafnode_num(BinTree bt)
{
	if(bt == NULL) return 0;
	else if (bt->lchild == NULL) && (bt->rchild == NULL)
		return 1;
	else
		return leafnode_num(b->lchild) + leafnode_num(bt->rchild)
}

4.将题29图所示的二叉树转换为对应的树或森林

在这里插入图片描述

解析:

在这里插入图片描述

对应的百度经验:

二叉树转换为森林:

假如一棵二叉树的根节点有右孩子,则这棵二叉树能够转换为森林,否则将转换为一棵树。
1.从根节点开始,若右孩子存在,则把与右孩子结点的连线删除。再查看分离后的二叉树,若其根节点的右孩子存在,则连线删除…。直到所有这些根节点与右孩子的连线都删除为止。
2.将每棵分离后的二叉树转换为树。

如下图所示:
在这里插入图片描述
将一个森林转换为二叉树

具体方法是:1.将森林中的每棵树变为二叉树;2.因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树。
如下图所示:

在这里插入图片描述

5.已知二叉链表的类型定义如下:

typedef struct btnode
{ DataType data;
struct btnode * lchild, *rchild;
} *BinTree;
利用二叉树遍历的递归算法,设计求二叉树的高度的算法Height(BinTree bt)。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值