数据结构知识点-树

二叉树

二叉树性质
性质1:二叉树的第i层至多有2^(i-1)个节点
性质2:深度为k的二叉树至多有2^(k)-1个节点
性质3:对于任意一颗二叉树,若度为2的节点有n2个,则叶子节点数n0必为n2+1个(n0=n2+1)
性质4:具有n个节点的完全二叉树的深度必为[log2n]+1(向下取整)
性质5:对于完全二叉树,从上至下,从左至右编号,则编号为i的节点,其左孩子编号必为2i,右孩子编号必为2i+1,其双亲编号必为i/2

结点和边的关系
二叉树共有结点n=n0+n1+n2,n0=n2+1,n=2n2+1
边数表示法1:b=n-1,除了根结点,每个结点都有一条边指向这个结点。
边数表示法2:b=n1+2n2,度为1的结点数量1+度为2的结点数量*2

满二叉树和完全二叉树
满二叉树:一颗深度为k且有2^(k)-1个节点的二叉树。
完全二叉树:深度为k的,且有n个结点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中的编号从1至n对应。

满二叉树和完全二叉树的区别:
满二叉树是叶子一个不少的数,完全二叉树虽然前n-1层是满的,但是最底层允许在右边缺少连续若干节点。
满二叉树是完全二叉树的一个特列。

二叉线索树
在n个节点的二叉链表中,有n+1个空指针域。
n个结点的二叉树必有2n个链域(lchild、rchild),除根结点外,每个结点有且仅有一个双亲节点(父亲结点),所以只会有n-1个结点的链域存放指针,空指针的数目=2n-(n-1)=n+1。

总的空指针2*n0+n1=n0+(n2+1)+n1=n+1

计算二叉树结点
如果是空树,则结点数为0
否则,结点个数=左子树结点个数+右子树结点个数+1

int NodeCount(BiTree T)
{
	if(T==NULL)
		return 0;
	else
		return NodeCount(T->lchild) + NodeCount(T->rchild) +1}

计算二叉树的叶子结点
如果是空树,则叶子结点个数为空
否则,叶子结点个数=左子树叶子结点个数+右子树叶子结点个数

int LeafCount(Bitree T)
{
	if(T==NULL)
		return 0;
	if(T->lchrild == NULL && T->rchild==NULL)
		return 1;
	else
		return LeafCount(T->lchild) + LeafCount(T->rchild);
}

计算二叉树的深度
如果是空树,则深度为0
否则,递归计算左子树的深度m,右子树深度n,二叉树的深度为max(m,n)+1

结论
若二叉树中的各个结点的值均不相同,则:
由二叉树的前序和中序、后序和中序能唯一地确定一颗二叉树,但是由前序和后序不能唯一的确定一颗二叉树。

线索二叉树
n个结点的二叉链表有n+1个空指针域,普通二叉树只能找到结点的左右孩子,而结点的直接前驱和直接后继只能在遍历中获得,若将遍历对应的前驱和后继预存起来,则从第一个结点就能顺藤摸瓜的遍历整课树。利用空链域(n+1),增加两个域fwd和bwd。

线索化二叉树
若结点有左孩子,则lchild指向其左孩子,否则lchild指向其直接前驱(线索)
若结点有右孩子,则rchild指向其右孩子,否则rchild指向其直接后继(线索)
在这里插入图片描述
LTag:
若LTag=0,lchild指向左孩子
若LTag=1,lchild指向前驱
RTag:
若RTag=0,rchild指向右孩子
若RTag=1,rchild指向后继
在这里插入图片描述如果有左子树指向左子树(LTag=0),没有左子树指向前驱(LTag=1)。
如果有右子树指向右子树(RTag=0),没有右子树指向后继(Rtag=1)。

哈夫曼树
前缀码:任一字符的编码都不是另一个字符编码的前缀

哈夫曼编码是不等长编码
哈夫曼编码是前缀编码
哈夫曼编码树中没有度为1的结点
哈夫曼编码树若叶子结点有n个,则总结点数为2n-1个
哈夫曼编码树按照左0右1的规定

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值