上一篇博客已经介绍过实际内容了,这一篇直接上干货代码了。
结构体
前面写的是用c语言写的,用的也是递归的方法
typedef char BTDataType;
typedef struct BTNode
{
struct BTNode* left;
struct BTNode* right;
BTDataType data;
}BTNode;
1、创建二叉树
typedef struct ReturnType{
BTNode *root;
int used;
}ReturnType;
// 1. 创建二叉树
ReturnType CreateBinTree(BTDataType* array, int size)
{
BTDataType rootValue = array[0];
if (rootValue == '#')
{
ReturnType returnValue;
returnValue.root = NULL;
returnValue.used = 1;
return returnValue;
}
BTNode *root = (BTNode*)malloc(sizeof(BTNode));
root->data = rootValue;
ReturnType left = CreateBinTree(array + 1 + left.used, size - 1 - left.used);
ReturnType right = CreateBinTree(array + 1 + left.used, size - 1 - left.used);
root->left = left.root;
root->right = right.root;
ReturnType returnValue;
returnValue.root = root;
returnValue.used = 1 + left.used + right.used;
return returnValue;
}
2、拷贝二叉树
// 拷贝二叉树
BTNode* CopyBinTree(BTNode* pRoot)
{
if (pRoot == NULL)
{
return NULL;
}
BTNode *root = (BTNode*)malloc(sizeof(BTNode));
root->data = pRoot->data;
root->left = CopyBinTree(pRoot->left);
root->right = CopyBinTree(pRoot->right);
return root;
}
3、销毁二叉树
// 销毁二叉树
void DestroyBinTree(BTNode* pRoot)
{
if (pRoot != NULL)
{
if (pRoot != NULL)
{
pRoot = NULL;
}
if (pRoot->left != NULL)
{
DestroyBinTree(pRoot->left);
pRoot->left = NULL;
}
if (pRoot->right != NULL)
{
DestroyBinTree(pRoot->right);
pRoot->right = NULL;
}
}
}
4、二叉树的三种遍历方式 (递归方式)
// 前序遍历