用c语言写一段代码,满足以下要求:1.-定义二叉链存储结构。 2-建立二叉链表存储的二叉树。 3.-实现二叉树的先序遍历、中序遍历和后序遍历。 4.-实现求二叉树的高度、求结点双亲、统计叶子结点数目的操作。5.-编写测试主函数,测试所实现的操作,并进行分析。
时间: 2024-12-08 07:13:56 浏览: 31
首先,让我们定义一个简单的二叉链表节点结构体,然后构建二叉树并实现各种遍历方法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉链表节点结构
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建新节点
TreeNode* createNode(int value) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 先序遍历
void preOrderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->data);
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
}
// 中序遍历
void inOrderTraversal(TreeNode* root) {
if (root != NULL) {
inOrderTraversal(root->left);
printf("%d ", root->data);
inOrderTraversal(root->right);
}
}
// 后序遍历
void postOrderTraversal(TreeNode* root) {
if (root != NULL) {
postOrderTraversal(root->left);
postOrderTraversal(root->right);
printf("%d ", root->data);
}
}
// 计算高度
int height(TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftHeight = height(root->left);
int rightHeight = height(root->right);
return 1 + MAX(leftHeight, rightHeight);
}
// 查找父节点
TreeNode* findParent(TreeNode* node, TreeNode* parent) {
if (parent == NULL || node->data == parent->data) {
return parent;
} else if (node->data > parent->data) {
return findParent(node->left, parent);
} else {
return findParent(node->right, parent);
}
}
// 统计叶子节点
int countLeaves(TreeNode* root) {
if (root == NULL) {
return 0;
} else if (root->left == NULL && root->right == NULL) {
return 1;
} else {
return countLeaves(root->left) + countLeaves(root->right);
}
}
// 测试主函数
int main() {
// 假设我们已经有一个二叉树实例,比如
// 1
// / \
// 2 3
// / \
// 4 5
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
printf("Preorder traversal: ");
preOrderTraversal(root);
printf("\n");
printf("Inorder traversal: ");
inOrderTraversal(root);
printf("\n");
printf("Postorder traversal: ");
postOrderTraversal(root);
printf("\n");
printf("Height of the tree: %d\n", height(root));
TreeNode* parent = findParent(root->left, root);
printf("Parent of node with value 2 is %d\n", parent->data);
printf("Number of leaves: %d\n", countLeaves(root));
return 0;
}
```
这个程序展示了如何使用C语言实现二叉链表以及相关的操作。注意,为了方便演示,这里假设了一个具体的二叉树结构。在实际应用中,你需要根据需求构造或读取数据来填充二叉树。
阅读全文