结构体:
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;
}