void BinTreeDestroy(TNODE **root)用这个函数名写一个二叉树的销毁C语言
时间: 2023-08-10 12:05:17 浏览: 89
以下是一个简单的二叉树销毁的 C 语言代码:
```c
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TNODE;
void BinTreeDestroy(TNODE **root) {
if (*root == NULL) {
return;
}
BinTreeDestroy(&((*root) -> left));
BinTreeDestroy(&((*root) -> right));
free(*root);
*root = NULL;
}
```
在这个函数中,我们首先检查二叉树的根节点是否为空。如果是空的,那么我们什么也不做,直接返回。否则,我们递归地销毁左子树和右子树,最后释放根节点并将其设置为 NULL。这可以确保我们不会意外地访问已经释放的内存。
相关问题
请用C语言编写函数,创建一棵空二叉树(即根指针为空指针)函数原型为void BinTreeCreate(TNODE **root);
好的,下面是函数的实现:
```c
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TNODE;
void BinTreeCreate(TNODE **root) {
*root = NULL; // 根指针初始化为空指针
}
```
这个函数接受一个指向指针的指针,用来存储根节点的地址。在函数内部,我们将根指针初始化为空指针。这个函数执行完毕后,我们就创建了一棵空二叉树。
请编写函数,输入二叉树。 函数原型 void BinTreeInput(TNODE **root); 说明:root 为指示二叉树根指针的指针。输入二叉树时按先根遍历的顺序输入结点的值,用特殊字符“#”来表示空二叉树。 在“BinTree.h”中声明函数,在“BinTree.c”中实现函数。 BinTree.h ...... void BinTreeInput(TNODE **root); ...... BinTree.c ...... /* 你提交的代码将被嵌在这里 */ 打开“main.c”,修改主函数对以上函数进行测试。 main.c #include <stdio.h> #include "BinTree.h" int main() { TNODE *r; BinTreeCreate(&r); BinTreeInput(&r); ...... BinTreeDestroy(&r); return 0; } 题图.jpg 输入样例 EIBJ##H###DF#A##G#C## 输出样例 C G D A F E I H B J
```c
// BinTree.h
#ifndef BINTREE_H
#define BINTREE_H
typedef struct tnode TNODE;
struct tnode {
char data;
TNODE *lchild, *rchild;
};
void BinTreeCreate(TNODE **root);
void BinTreeInput(TNODE **root);
void BinTreeDestroy(TNODE **root);
#endif
// BinTree.c
#include <stdio.h>
#include <stdlib.h>
#include "BinTree.h"
void BinTreeCreate(TNODE **root) {
*root = NULL;
}
void BinTreeDestroy(TNODE **root) {
if (*root != NULL) {
BinTreeDestroy(&(*root)->lchild);
BinTreeDestroy(&(*root)->rchild);
free(*root);
}
}
void BinTreeInput(TNODE **root) {
char data;
scanf("%c", &data);
if (data == '#') {
*root = NULL;
} else {
*root = (TNODE *)malloc(sizeof(TNODE));
if (*root == NULL) {
printf("Error: malloc failed\n");
exit(1);
}
(*root)->data = data;
BinTreeInput(&(*root)->lchild);
BinTreeInput(&(*root)->rchild);
}
}
```
测试代码:
```c
// main.c
#include <stdio.h>
#include "BinTree.h"
int main() {
TNODE *r;
BinTreeCreate(&r);
printf("请输入二叉树(先根遍历,用#表示空节点):");
BinTreeInput(&r);
printf("输出二叉树:\n");
printf(" %c \n", r->data);
printf(" %c %c \n", r->lchild->data, r->rchild->data);
printf(" %c %c %c \n", r->lchild->lchild->data, r->rchild->lchild->data, r->rchild->rchild->data);
printf(" %c %c \n", r->lchild->lchild->lchild->data, r->lchild->rchild->data);
BinTreeDestroy(&r);
return 0;
}
```
阅读全文