二叉树的销毁操作
要销毁一个二叉树的话,我们首先得创建一个二叉树。
二叉树的模拟创建代码:
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <time.h>
typedef int BTDataType;//二叉树存放数据的类型
typedef struct BinaryTreeNode {//二叉树结构的定义
struct BinaryTreeNode* left;//二叉树的左节点
struct BinaryTreeNode* right;//二叉树的右节点
BTDataType data;//二叉树的数据域
}BTNode;//将定义的二叉树结构名字重新简化定义
BTNode* BuyNode(BTDataType x) {//创建并且同时初始化二叉树的一个节点
BTNode* node = (BTNode*)malloc(sizeof(BTNode));
if (node == NULL) {
printf("malloc fail!");
exit(-1);
}
node->left = NULL;
node->right = NULL;
node->data = x;
return node;
}
BTNode* CreatBinaryTree() {//模拟创建一个二叉树
BTNode* node1 = BuyNode(1);
BTNode* node2 = BuyNode(2);
BTNode* node3 = BuyNode(3);
BTNode* node4 = BuyNode(4);
BTNode* node5 = BuyNode(5);
BTNode* node6 = BuyNode(6);
node1->left = node2;
node1->right = node4;
node2->left = node3;
node4->left = node5;
node4->right = node6;
return node1;
}
int main(){
BTNode* root = CreatrTree();
return 0;
}
创建完成后的二叉树如下图所示:
二叉树的销毁代码:
void TreeDestory(BTNode* root) {
if (root == NULL) {//当根节点为空的时候,直接返回上一层就可以。
return;
}
//printf("%d ", root->data);//可以借助打印来看程序是否执行正确
TreeDestory(root->left);//先遍历左子树
TreeDestory(root->right);//再遍历右子树
free(root);//当左右子树都为空的时候,再将其根节点销毁。
//这样,在其深度遍历完成的时候,这个二叉树就基本上被销毁了。
}
总体思想:要销毁一个二叉树的话,我们可以先将其的左子树和右子树销毁,最后我们再销毁根节点。(最后销毁根节点的原因是:得需要利用其来找到其他的节点)