二叉树的创建与遍历1

//n0表示叶子节点的个数,n2表示度为2的非叶子节点的个数,那么两者满足关系n0 = n2 + 1,
//n1表示度为1的非叶子节点的个数 ,有总结点数n = n0 + n1 + n2
/*
二叉树的遍历:
先序:根,左子树,右子树
中序:左子树,根,右子树
后序:左子树,右子树,根
层次遍历:从上到下,从左到右
*/
typedef struct TreeNode  *BinTree
typedef struct TreeNode {
	ElemType Data;
	BinTree Left;
	BinTree Right;	
}
//二叉树的创建

void CreatTree(BinTree &T)
{
//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,
//构造二叉链表表示的二叉树T
	char ch;
	ch = getchar();
	if(ch == 'Q') T = NULL;//Q也可为空格等字符,表示为空树
	else
	{
		if(!(T = (BinTree *)malloc(sizeof(BinTree)))) 
			exit(1);
		T->data = ch;
		CreatTree(T->Left);
		CreatTree(T->Right);
	}
	return ;
}
1.顺序存储结构(创建完全二叉树)
完全二叉树
特点:非根结点的父节点的序号是[i/2];
2i <= n,否则没有左孩子
2i + 1 <= n ,否则没有右孩子
一般二叉树 填充空缺位,造成空间浪费。

2.链式存储结构
//二叉树的遍历:采用递归的方法
//先序遍历
void PreOrderTraversal( BinTree BT )
{
	if(BT) //指针不为空
	{
		printf("%d	",BT->Data);
		PreOrderTraversal( BT->Left);
		PreOrderTraversal( BT->Right)
	}	
	else
		return;
}
//中序遍历
void InOrderTraversal( BinTree BT )
{
	if(BT) //指针不为空
	{
		PreOrderTraversal( BT->Left);
		printf("%d	",BT->Data);
		PreOrderTraversal( BT->Right)
	}	
	else
		return;		
}

//后序遍历

void PostOrderTraversal( BinTree BT )
{
	if(BT) //指针不为空
	{
		PreOrderTraversal( BT->Left);
		PreOrderTraversal( BT->Right)
		printf("%d	",BT->Data);
	}	
	else
		return;		
}
//二叉树的销毁

void DestroyTree( BinTree BT )//递归删除子树
{
	if(BT) //指针不为空
	{
		PreOrderTraversal( BT->Left);
		PreOrderTraversal( BT->Right)
		free(BT);
	}	
	else
		return;		
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值