目录
1.知识回顾
2.分析
销毁二叉树需要按照一定的顺序去销毁,例如:先销毁根还是先销毁根对应的左右节点?这里有讲究
可以采用三种遍历的方法逐个销毁节点
3.代码
后序遍历销毁(最简洁)
后序遍历:按左子树-->右子树-->根的顺序遍历
cpp
void TreeDestory(BTNode* root)
{
if (root == NULL)
return;
TreeDestory(root->left);
TreeDestory(root->right);
free(root);
}
前序遍历销毁(不推荐)
前序遍历:按根-->左子树-->右子树的顺序遍历
销毁根节点前需要保存根节点指向的左右节点的地址
cpp
void TreeDestory(BTNode* root)
{
if (root == NULL)
return;
BTNode* left = root->left;
BTNode* right = root->right;
free(root);
TreeDestory(left);
TreeDestory(right);
}
中序遍历销毁(不推荐)
销毁根节点前需要保存根节点指向的右节点的地址
cpp
void TreeDestory(BTNode* root)
{
if (root == NULL)
return;
TreeDestory(root->left);
BTNode* right = root->right;
free(root);
TreeDestory(right);
}
注:三种方法在free()后均没有将指针置NULL,原因是root是一级指针,要想改变一级指针的值需要传递二级指针,可以在main函数中将指针手动置NULL
4.将函数嵌入main函数中执行
cpp
int main()
{
BTNode* root = CreateTree();
TreeDestory(root);
root = NULL;
return 0;
}