利用C语言完成对二叉树的以下操作:初始化二叉树,建立二叉树,销毁二叉树,计算二叉树的深度,计算二叉树的叶子结点总数,根据已有二叉树拷贝一颗新二叉树。
时间: 2023-11-14 11:12:10 浏览: 87
C语言实现二叉树的各种操作。
4星 · 用户满意度95%
好的,我可以为您提供C语言的实现代码,以下是对二叉树的操作:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 初始化二叉树
struct TreeNode* initTree() {
return NULL;
}
// 建立二叉树
struct TreeNode* createTree() {
int val;
scanf("%d", &val);
if (val == -1) { // -1 代表该结点为空
return NULL;
}
struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node->val = val;
node->left = createTree();
node->right = createTree();
return node;
}
// 销毁二叉树
void destroyTree(struct TreeNode* node) {
if (node == NULL) {
return;
}
destroyTree(node->left);
destroyTree(node->right);
free(node);
}
// 计算二叉树的深度
int getDepth(struct TreeNode* node) {
if (node == NULL) {
return 0;
}
int leftDepth = getDepth(node->left);
int rightDepth = getDepth(node->right);
return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}
// 计算二叉树的叶子结点总数
int getLeafCount(struct TreeNode* node) {
if (node == NULL) {
return 0;
}
if (node->left == NULL && node->right == NULL) {
return 1;
}
return getLeafCount(node->left) + getLeafCount(node->right);
}
// 根据已有二叉树拷贝一颗新二叉树
struct TreeNode* cloneTree(struct TreeNode* node) {
if (node == NULL) {
return NULL;
}
struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
newNode->val = node->val;
newNode->left = cloneTree(node->left);
newNode->right = cloneTree(node->right);
return newNode;
}
int main() {
struct TreeNode* root = initTree(); // 初始化二叉树
root = createTree(); // 建立二叉树
int depth = getDepth(root); // 计算二叉树的深度
int leafCount = getLeafCount(root); // 计算二叉树的叶子结点总数
struct TreeNode* newRoot = cloneTree(root); // 根据已有二叉树拷贝一颗新二叉树
destroyTree(root); // 销毁二叉树
destroyTree(newRoot); // 销毁新二叉树
return 0;
}
```
以上是对二叉树的初始化、建立、销毁、深度计算、叶子结点总数计算和拷贝的C语言实现代码。希望可以帮助到您!
阅读全文