二叉树的存储、遍历及建立

由于顺序存储结构会造成存储空间的浪费,顺序存储结构一般只用于完全二叉树。

1.二叉树的存储结构——二叉链表

二叉树每个节点最多有两个孩子,所以为它设计一个数据域和两个指针域,我们称这样的链表为二叉链表。

data是数据域,lchild和rchild都是指针域,分别指向左孩子和右孩子的指针。

结构定义代码。

/*二叉树的二叉链表节点结构定义*/
typedef struct BiTree{
	TElemType data;  /*节点数据*/
	struct BiTree *lchild, *rchild; /*左右孩子指针*/
}BiTree, *BiTree;

2.遍历二叉树

1)前序遍历

若二叉树为空,则空操作返回。否则,先访问根节点,然后前序遍历左子树,再前序遍历右子树。 前--左---右

/*二叉树的前序遍历算法*/
void PreOrderTraverse(BiTree T)
{
	if(T==NULL )
		return;
	printf("%c",T-data);/*显示节点数据,可以更改为其他对节点操作*/
	PreOrderTraverse(T-<lchild);
	PreOrderTRaverse(T->rchild);
}

2)中序遍历

左---根---右

/*二叉树的中序遍历算法*/
void InOrderTraverse(BiTree T)
{
	if(T==NULL )
		return;
	InOrderTraverse(T-<lchild);
	printf("%c",T-data);/*显示节点数据,可以更改为其他对节点操作*/
	InOrderTRaverse(T->rchild);
}

3)后序遍历

左---右---根

/*二叉树的后序遍历算法*/
void PostOrderTraverse(BiTree T)
{
	if(T==NULL )
		return;
	PostOrderTraverse(T-<lchild);
	PostOrderTRaverse(T->rchild);
	printf("%c",T-data);/*显示节点数据,可以更改为其他对节点操作*/
}

4)层序遍历

从上到下,从左到右。

3.二叉树的建立

/*按前序输入二叉树中节点的值(一个字符)*/
/*#表示空树,构造二叉链表表示二叉树T*/
void CreateBiTree(BiTree *T)
{
	TElemType ch;
	scanf("%c", &ch);
	if(ch=='#')
		*T =NULL ;
	else 
	{
		*T=(BiTree)malloc(sizeof(BiTNode));
		if(!*T)
			exit(OVERFLOW);
		(*T)->data=ch;
		CreateBiTree(&(*T)->lchild);
		CreateBiTree(&(*T)->rchild);
	}
}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值