给出C++代码,用二叉链表存储表示方法,实现二叉树的基本操作。(1) 根据扩展二叉树的前序遍历序列,建立二叉树。(2) 根据二叉树的前序和中序遍历序列,构造二叉树。(3) 实现二叉树的前序、中序和后序遍历,输出遍历结果。
时间: 2024-06-04 18:10:21 浏览: 112
可以的,以下是实现二叉树的基本操作的 C 代码:
#include <stdio.h>
#include <stdlib.h>
// 二叉树的定义
typedef struct BinaryTreeNode {
int data;
struct BinaryTreeNode *left;
struct BinaryTreeNode *right;
} BinaryTreeNode;
// 根据扩展二叉树的前序遍历序列建立二叉树
BinaryTreeNode* createBinaryTree1() {
BinaryTreeNode *p;
int ch;
scanf("%c", &ch);
if (ch == ' ') {
p = NULL;
} else {
p = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
p->data = ch;
p->left = createBinaryTree1();
p->right = createBinaryTree1();
}
return p;
}
// 根据二叉树的前序和中序遍历序列构造二叉树
BinaryTreeNode* createBinaryTree2(int *preorder, int *inorder, int len) {
if (len == 0) {
return NULL;
}
BinaryTreeNode *p = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
p->data = preorder[0];
int i;
for (i = 0; i < len; i++) {
if (inorder[i] == preorder[0]) {
break;
}
}
int leftlen = i;
int rightlen = len - i - 1;
p->left = createBinaryTree2(preorder + 1, inorder, leftlen);
p->right = createBinaryTree2(preorder + 1 + leftlen, inorder + leftlen + 1, rightlen);
return p;
}
// 二叉树的前序遍历
void preOrder(BinaryTreeNode *p) {
if (p != NULL) {
printf("%d ", p->data);
preOrder(p->left);
preOrder(p->right);
}
}
// 二叉树的中序遍历
void inOrder(BinaryTreeNode *p) {
if (p != NULL) {
inOrder(p->left);
printf("%d ", p->data);
inOrder(p->right);
}
}
// 二叉树的后序遍历
void postOrder(BinaryTreeNode *p) {
if (p != NULL) {
postOrder(p->left);
postOrder(p->right);
printf("%d ", p->data);
}
}
int main() {
// 手动输入前序遍历序列建立二叉树
BinaryTreeNode *root1 = createBinaryTree1();
// 根据前序和中序遍历序列构造二叉树
int preorder[] = {1, 2, 4, 5, 3, 6, 7};
int inorder[] = {4, 2, 5, 1, 6, 3, 7};
BinaryTreeNode *root2 = createBinaryTree2(preorder, inorder, sizeof(preorder) / sizeof(int));
// 二叉树的遍历
printf("二叉树1的前序遍历:");
preOrder(root1);
printf("\n");
printf("二叉树1的中序遍历:");
inOrder(root1);
printf("\n");
printf("二叉树1的后序遍历:");
postOrder(root1);
printf("\n");
printf("二叉树2的前序遍历:");
preOrder(root2);
printf("\n");
printf("二叉树2的中序遍历:");
inOrder(root2);
printf("\n");
printf("二叉树2的后序遍历:");
postOrder(root2);
printf("\n");
return 0;
}
阅读全文