先序遍历的顺序建立二叉树用c语言实现
时间: 2023-09-22 14:08:20 浏览: 94
二叉树的几种操作,包括递归先序建立二叉树、先序遍历、中序遍历、后序遍历、非递归的各种遍历
好的,下面是用 C 语言实现先序遍历建立二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* createTree(int *preorder, int preorderSize) {
if (preorderSize == 0) {
return NULL;
}
struct TreeNode *root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = *preorder;
int i = 1;
while (i < preorderSize && *(preorder+i) <= *preorder) {
i++;
}
root->left = createTree(preorder+1, i-1);
root->right = createTree(preorder+i, preorderSize-i);
return root;
}
void inOrderTraversal(struct TreeNode *root) {
if (root == NULL) {
return;
}
inOrderTraversal(root->left);
printf("%d ", root->val);
inOrderTraversal(root->right);
}
int main() {
int preorder[] = {3, 2, 1, 5, 4, 6};
int preorderSize = sizeof(preorder) / sizeof(preorder[0]);
struct TreeNode *root = createTree(preorder, preorderSize);
printf("Inorder Traversal:\n");
inOrderTraversal(root);
return 0;
}
```
这段代码中,我定义了一个名为 `TreeNode` 的结构体,表示二叉树的节点,包括节点值和左右子树指针。然后定义了一个 `createTree()` 函数,用于根据先序遍历序列构建二叉树。该函数的参数包括先序遍历序列和序列长度,返回构建好的二叉树的根节点指针。在函数中,首先判断序列长度是否为 0,若为 0 则返回空指针。否则,取序列的第一个元素作为当前节点的值,然后在序列中查找第一个大于当前节点值的位置,将序列分成左右两部分,递归构建左右子树,并将左右子树指针分别赋值给当前节点的左右子树指针。
最后,我定义了一个 `inOrderTraversal()` 函数,用于进行中序遍历,并将节点值输出到控制台。在 `main()` 函数中,我构建了一个先序遍历序列作为测试数据,然后调用 `createTree()` 函数构建二叉树,并调用 `inOrderTraversal()` 函数对二叉树进行中序遍历输出。
阅读全文