c语言实现首先利用扩展的先序遍历方法创建二叉树,再 实现二叉树的先序遍历、中序遍历和后序遍历的递归算法,以及层次遍历的算法,并且用括号表示法输入
时间: 2024-12-17 11:23:15 浏览: 77
在C语言中,实现二叉树的遍历主要通过递归和非递归两种方式。首先,我们可以使用扩展的先序遍历(也叫前序遍历)构建二叉树,这个过程通常从根节点开始,然后递归地访问左子树,最后访问右子树。
以下是使用递归实现二叉树的先序遍历、中序遍历、后序遍历以及层次遍历(广度优先搜索)的示例:
1. **扩展先序遍历(递归)** - 创建二叉树:
```c
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
TreeNode* createTree(int arr[], int n) {
if (n <= 0) return NULL;
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = arr[0];
root->left = createTree(arr + 1, n / 2);
root->right = createTree(arr + n / 2 + 1, n - n / 2 - 1);
return root;
}
```
2. **先序遍历(递归)**:
```c
void preorderTraversal(TreeNode* node) {
if (node != NULL) {
printf("%d ", node->val); // 输出当前节点值
preorderTraversal(node->left); // 遍历左子树
preorderTraversal(node->right); // 遍历右子树
}
}
```
3. **中序遍历(递归)**:
```c
void inorderTraversal(TreeNode* node) {
if (node != NULL) {
inorderTraversal(node->left); // 遍历左子树
printf("%d ", node->val); // 输出当前节点值
inorderTraversal(node->right); // 遍历右子树
}
}
```
4. **后序遍历(递归)**:
```c
void postorderTraversal(TreeNode* node) {
if (node != NULL) {
postorderTraversal(node->left); // 遍历左子树
postorderTraversal(node->right); // 遍历右子树
printf("%d ", node->val); // 输出当前节点值
}
}
```
5. **层次遍历(非递归)**(使用队列):
```c
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) return;
queue<TreeNode*> q;
q.enqueue(root);
while (!q.isEmpty()) {
TreeNode* curr = q.dequeue();
printf("%d ", curr->val); // 输出当前层节点值
if (curr->left) q.enqueue(curr->left);
if (curr->right) q.enqueue(curr->right);
}
}
```
你可以将上述代码片段整合到一个完整的程序中,并结合用户提供的数组输入来进行操作。记得在使用之前处理输入数据,例如数组arr[]和对应的元素个数n。
阅读全文
相关推荐


















