用C语言编写根据前序遍历的顺序建立一棵二叉树,并根据遍历规则遍历二叉树。 打印输出。 3、实验要求 (1)根据前序遍历的顺序创建一棵二叉树; ()对二叉树进行前序、中序、后序遍历
时间: 2024-11-25 14:10:21 浏览: 32
在C语言中,我们可以使用递归的方式根据前序遍历构建二叉树。前序遍历的顺序通常是“根节点-左子树-右子树”,这意味着我们在访问每一个结点时,先处理根结点,然后递归地处理左子树,最后处理右子树。下面是一个简单的示例:
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个新的树节点
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 根据前序遍历序列建立二叉树
TreeNode* buildTreeFromPreorder(int preorder[], int size, int rootIndex) {
if (rootIndex == size)
return NULL;
TreeNode* root = createNode(preorder[rootIndex]);
root->left = buildTreeFromPreorder(preorder, size, rootIndex + 1);
root->right = buildTreeFromPreorder(preorder, size, rootIndex + 1 + root->left->size); // 根据前序找到左右子树的位置
return root;
}
// 前序遍历函数
void preOrderTraversal(TreeNode* node) {
if (node != NULL) {
printf("%d ", node->val); // 打印根节点
preOrderTraversal(node->left);
preOrderTraversal(node->right);
}
}
// 中序遍历函数
void inOrderTraversal(TreeNode* node) {
if (node != NULL) {
inOrderTraversal(node->left);
printf("%d ", node->val); // 打印根节点
inOrderTraversal(node->right);
}
}
// 后序遍历函数
void postOrderTraversal(TreeNode* node) {
if (node != NULL) {
postOrderTraversal(node->left);
postOrderTraversal(node->right);
printf("%d ", node->val); // 打印根节点
}
}
```
阅读全文