编写函数用来释放二叉树节点内存
时间: 2024-01-23 11:10:40 浏览: 10
好的,以下是一个释放二叉树节点内存的函数示例:
```c
void freeTree(struct TreeNode* root) {
if (root != NULL) {
freeTree(root->left);
freeTree(root->right);
free(root);
}
}
```
这个函数通过递归的方式遍历整个二叉树,将每个节点释放掉。如果当前节点为 NULL,说明这个节点已经被释放过了,直接返回即可。否则,先递归释放左子树,再递归释放右子树,最后释放当前节点本身。
相关问题
编写查找二叉树结点的函数。
下面是查找二叉树结点的函数的 C++ 代码实现:
```cpp
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* searchBST(TreeNode* root, int val) {
if (!root || root->val == val) {
return root;
}
if (val < root->val) {
return searchBST(root->left, val);
} else {
return searchBST(root->right, val);
}
}
```
该函数的参数包括二叉树的根节点指针 `root` 和需要查找的目标值 `val`。在函数内部,首先判断当前节点是否为空或者当前节点的值是否等于目标值,如果是,则直接返回当前节点指针;如果不是,则根据目标值的大小关系,递归搜索左子树或右子树。如果最终没有找到目标节点,则返回 `NULL`。
用c语言1.编写函数,输入字符序列,建立二叉树的二叉链表 2.编写函数,实现二叉树的中序递归遍历算法。 3.编写函数,实现二叉树的中序非递归遍历算法 4.编写函数,借助队列实现二叉树的层次遍历算法 5.编写函数,求二叉树的高度 6.编写函数,求二叉树的结点个数 7.编写函数,求二叉树的叶子个数 8.编写函数,交换二叉树每个结点的左子树和右子树
这些问题属于编程类问题,我可以回答。
1. 下面是用C语言编写输入字符序列,建立二叉树的二叉链表的函数:
```c
typedef struct BiNode {
char data;
struct BiNode *left;
struct BiNode *right;
} BiNode, *BiTree;
void createBiTree(BiTree *root) {
char ch;
scanf("%c", &ch);
if (ch == '#') {
*root = NULL;
} else {
*root = (BiNode *) malloc(sizeof(BiNode));
(*root)->data = ch;
createBiTree(&((*root)->left));
createBiTree(&((*root)->right));
}
}
```
2. 下面是用C语言编写实现二叉树的中序递归遍历算法的函数:
```c
void inOrder(BiTree tree) {
if (tree != NULL) {
inOrder(tree->left);
printf("%c ", tree->data);
inOrder(tree->right);
}
}
```
3. 下面是用C语言编写实现二叉树的中序非递归遍历算法的函数:
```c
void inOrderNonRecursion(BiTree tree) {
BiNode *stack[10000];
int top = -1;
BiNode *p = tree;
while (p != NULL || top != -1) {
while (p != NULL) {
stack[++top] = p;
p = p->left;
}
if (top != -1) {
p = stack[top--];
printf("%c ", p->data);
p = p->right;
}
}
}
```
4. 下面是用C语言编写借助队列实现二叉树的层次遍历算法的函数:
```c
void levelOrder(BiTree tree) {
BiNode *queue[10000];
int front = 0, rear = 0;
if (tree != NULL) {
queue[++rear] = tree;
while (front != rear) {
front++;
BiNode *p = queue[front];
printf("%c ", p->data);
if (p->left != NULL) {
queue[++rear] = p->left;
}
if (p->right != NULL) {
queue[++rear] = p->right;
}
}
}
}
```
5. 下面是用C语言编写求二叉树的高度的函数:
```c
int getHeight(BiTree tree) {
if (tree == NULL) {
return 0;
} else {
int leftHeight = getHeight(tree->left);
int rightHeight = getHeight(tree->right);
return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}
}
```
6. 下面是用C语言编写求二叉树的结点个数的函数:
```c
int getNodeCount(BiTree tree) {
if (tree == NULL) {
return 0;
} else {
return getNodeCount(tree->left) + getNodeCount(tree->right) + 1;
}
}
```
7. 下面是用C语言编写求二叉树的叶子个数的函数:
```c
int getLeafCount(BiTree tree) {
if (tree == NULL) {
return 0;
}
if (tree->left == NULL && tree->right == NULL) {
return 1;
} else {
return getLeafCount(tree->left) + getLeafCount(tree->right);
}
}
```
8. 下面是用C语言编写交换二叉树每个结点的左子树和右子树的函数:
```c
void swapBiTree(BiTree tree) {
if (tree != NULL) {
BiNode *temp = tree->left;
tree->left = tree->right;
tree->right = temp;
swapBiTree(tree->left);
swapBiTree(tree->right);
}
}
```