【Day8·超详细】数据结构 之 二叉树性质、存储、四种遍历、构造二叉树

导读

本篇文章将会简单介绍二叉树的很重要的基础内容,包括五大重要性质、存储方式、四种遍历代码与思想、先序遍历构造二叉树、遍历序列确定二叉树

五大重要性质

1.第i层最多有2的i-1次方个元素

2.深度为k的树最多有2的k次方-1个元素

3.二叉树度为0的结点个数为n0,度为2的结点个数为n2,则n0=n2+1

4.n个结点,完全二叉树,深度为:以2为底n的对数的向下取整加一或者是以2为底n的对数的向上取整

5.i>1时:双亲为i/2的向下取整,右孩子2i,左孩子2i+1

存储结构

对于二叉树最常用的就是链式存储:

typedef struct BiTNode{
	int data;
	struct BiTNode *lchild;
	struct BiTNode *rchild;
}BiTNode,*BiTree;

而对于完全二叉树,顺序存储也是一种方案,只不过比较复杂,需要进行一些转换

四大遍历

前中后序遍历就不多说了,在此仅仅以中序遍历为例,给出代码:

Status InorderTraverse(BiTree T)
{
	if(T)
	{
		InorderTraverse(T->lchild);
		printf("%d ",T->data);
		InorderTraverse(T->rchild);
	}
	else
	return OK;
	return OK;
}

然后说一下层序遍历,方法是

建立一个队列,头结点入队

进入循环,条件是队列不空

出队,并用T保存,打印T中的数据

分别入队T的左右孩子

代码:

Status LevelTraverse(BiTree T)
{
	QueuePte Q=InitQueue();
	EnQueue(Q,T);
	while(!QueueEmpty(Q))
	{
		DeQueue(Q,T);
		printf("%d ",T->data);
		EnQueue(Q,T->lchild);
		EnQueue(Q,T->rchild);
	}
	printf("\n");
	return OK;
}

遍历序列与二叉树构造

先来看先序构造二叉树算法:

Status CreatBinaryTree(BiTree T)
{
	char ch;
	scanf("%c",&ch);
	if(ch==' ')
	T=NULL;
	else
	{
		T=(BiTree T)malloc(sizeof(BiTNode));
		T->data=ch;
		CreatBinaryTree(T->lchild);
		CreatBinartTree(T->rchild);
    }
	return OK;  
}

最后再将一个知识点:

由中序遍历序列+任一一个遍历序列求出树的唯一结构:

比如:

先序:a b d e c f g

中序:d b e a f c g

先由先序序列知道,a为整个树的头结点,再中序序列分割成左右树,左边有dbe右边有fcg,回到先序序列,第二个为b,说明dbe中b为根节点,de分别为左右子树,依次类推得到:

             a

        b        c

     d   e     f    g

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值