数据结构——二叉树的基本操作——创建、破坏、拷贝(复制)

结构体:

typedef char BTDataType;

typedef struct BTNode
{
	struct BTNode* pLeft;
	struct BTNode* pRight;
	BTDataType data;
}BTNode;

创建二叉树:

BTNode* CreateBinTree(BTNode* array, int size)
{
	BTDataType data;
	scanf("%d", &data);

	if (data == 0)     //如果到了叶子节点,接下来的左、右子树分别赋值为0
	{
		array = NULL;
	}
	else
	{

		array = (BTNode*)malloc(sizeof(BTNode));
		array->data = data;
		size++;
	    CreateBinTree(array->pLeft,size);  //递归创建左子树
		CreateBinTree(array->pRight,size);  //递归创建右子树

	}

	return array;
}

销毁二叉树:

// 销毁二叉树 
//判断是否左节点,如果存在左节点一直递归下去;
//判断是否右节点,如果存在右节点一直递归下去;
//当一个结点无左结点和右结点,将结点free掉。
void DestroyBinTree(BTNode** pRoot)
{
	if (*pRoot==NULL)
	{
		return;
	}

	if ((*pRoot)->pLeft!=NULL)
	{
		DestroyBinTree((*pRoot)->pLeft);
	}

	if ((*pRoot)->pRight != NULL)
	{
		DestroyBinTree((*pRoot)->pRight);
	}

	free(pRoot);
	*pRoot = NULL;
}

拷贝二叉树:

// 拷贝二叉树 
BTNode* CopyBinTree(BTNode* pRoot)
{
	if (pRoot == NULL)
		return;

	BTNode* Node = (BTNode*)malloc(sizeof(BTNode));
	Node->data = pRoot->data;
	Node->pLeft=CopyBinTree(pRoot->pLeft);
	Node->pRight=CopyBinTree(pRoot->pRight);

	return Node;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值