能否提供一份用C语言实现的二叉树链式存储结构的完整示例代码,包括三种遍历,输出叶子结点等结点
时间: 2024-12-02 12:20:42 浏览: 39
当然可以。这里是一个简单的C语言二叉树链式存储结构的实现,包括插入节点、查找、删除以及三种遍历(前序、中序和后序)。注意,这个例子假设了节点有左孩子和右孩子的指针。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入节点
Node* insertNode(Node* root, int data) {
if (root == NULL) {
root = createNode(data);
} else if (data < root->data) {
root->left = insertNode(root->left, data);
} else {
root->right = insertNode(root->right, data);
}
return root;
}
// 前序遍历
void preOrderTraversal(Node* root) {
if (root != NULL) {
printf("%d ", root->data);
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
}
// 中序遍历
void inOrderTraversal(Node* root) {
if (root != NULL) {
inOrderTraversal(root->left);
printf("%d ", root->data);
inOrderTraversal(root->right);
}
}
// 后序遍历
void postOrderTraversal(Node* root) {
if (root != NULL) {
postOrderTraversal(root->left);
postOrderTraversal(root->right);
printf("%d ", root->data);
}
}
// 查找并输出所有叶子节点
void printLeaves(Node* root) {
if (root != NULL && (root->left == NULL && root->right == NULL)) {
printf("%d ", root->data);
} else if (root->left != NULL) {
printLeaves(root->left);
} else if (root->right != NULL) {
printLeaves(root->right);
}
}
int main() {
// 初始化空树
Node* root = NULL;
// 插入一些节点
root = insertNode(root, 50);
insertNode(root, 30);
insertNode(root, 20);
insertNode(root, 40);
insertNode(root, 70);
insertNode(root, 60);
insertNode(root, 80);
// 打印前序、中序和后序遍历结果
printf("Preorder traversal: ");
preOrderTraversal(root);
printf("\nInorder traversal: ");
inOrderTraversal(root);
printf("\nPostorder traversal: ");
postOrderTraversal(root);
printf("\n");
// 输出所有叶子节点
printf("Leaf nodes: ");
printLeaves(root);
printf("\n");
return 0;
}
```
在这个代码示例中,我们首先创建了一个二叉搜索树,并实现了前序、中序和后序遍历。`printLeaves`函数用于查找并打印所有的叶子节点。记得先包含头文件并在main函数中进行相应的操作。运行此程序,可以看到节点的数据及其遍历顺序以及叶子节点的信息。
阅读全文