用C语言实现下图所示的二叉树的基本操作,具体要求如下: (1)创建下图所示的二叉树; (2)完成先序、中序和后序遍历二叉树的算法; (3)求二叉树的高度。
时间: 2024-11-09 16:12:43 浏览: 8
C语言二叉树的三种遍历方式的实现及原理
5星 · 资源好评率100%
在C语言中,我们可以使用结构体来表示二叉树节点,并结合递归思想实现基本操作:
```c
// 定义二叉树节点结构体
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左孩子指针
struct TreeNode* right; // 右孩子指针
} TreeNode;
// 创建一个新节点
TreeNode* createNode(int val) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 构建给定的二叉树
void buildTree(TreeNode** root, int arr[], int start, int end) {
if (start > end)
return;
int mid = (start + end) / 2;
*root = createNode(arr[mid]);
(*root)->left = buildTree(&(*root)->left, arr, start, mid - 1);
(*root)->right = buildTree(&(*root)->right, arr, mid + 1, end);
}
// 先序遍历(根-左-右)
void preOrderTraversal(TreeNode* node) {
if (node == NULL)
return;
printf("%d ", node->val);
preOrderTraversal(node->left);
preOrderTraversal(node->right);
}
// 中序遍历(左-根-右)
void inOrderTraversal(TreeNode* node) {
if (node == NULL)
return;
inOrderTraversal(node->left);
printf("%d ", node->val);
inOrderTraversal(node->right);
}
// 后序遍历(左-右-根)
void postOrderTraversal(TreeNode* node) {
if (node == NULL)
return;
postOrderTraversal(node->left);
postOrderTraversal(node->right);
printf("%d ", node->val);
}
// 计算二叉树高度
int height(TreeNode* root) {
if (root == NULL)
return 0;
int leftHeight = height(root->left);
int rightHeight = height(root->right);
return max(leftHeight, rightHeight) + 1;
}
```
阅读全文