C++编写掌握二叉树的初始化、建立、打印输出二叉树,先序、中序、后序遍历二叉树的递归实现等基本操作,挑战二叉树层次遍历实现代码。
时间: 2024-01-23 22:48:11 浏览: 74
二叉树的先序、中序、后序、分层遍历C++实现
4星 · 用户满意度95%
二叉树的初始化、建立、打印输出二叉树,先序、中序、后序遍历二叉树的递归实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 初始化二叉树
TreeNode* initTree() {
TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
root->val = 0;
root->left = NULL;
root->right = NULL;
return root;
}
// 建立二叉树
void createTree(TreeNode *root) {
int val;
printf("请输入结点的值(-1表示空结点):");
scanf("%d", &val);
if (val == -1) {
return;
}
root->val = val;
root->left = initTree();
root->right = initTree();
createTree(root->left);
createTree(root->right);
}
// 先序遍历二叉树
void preOrder(TreeNode *root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preOrder(root->left);
preOrder(root->right);
}
// 中序遍历二叉树
void inOrder(TreeNode *root) {
if (root == NULL) {
return;
}
inOrder(root->left);
printf("%d ", root->val);
inOrder(root->right);
}
// 后序遍历二叉树
void postOrder(TreeNode *root) {
if (root == NULL) {
return;
}
postOrder(root->left);
postOrder(root->right);
printf("%d ", root->val);
}
// 打印输出二叉树
void printTree(TreeNode *root, int level) {
if (root == NULL) {
return;
}
printTree(root->right, level + 1);
for (int i = 0; i < level; i++) {
printf(" ");
}
printf("%d\n", root->val);
printTree(root->left, level + 1);
}
int main() {
TreeNode *root = initTree();
createTree(root);
printf("先序遍历:");
preOrder(root);
printf("\n中序遍历:");
inOrder(root);
printf("\n后序遍历:");
postOrder(root);
printf("\n打印输出:\n");
printTree(root, 0);
return 0;
}
```
二叉树层次遍历的实现可以使用队列来完成,具体代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 初始化二叉树
TreeNode* initTree() {
TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
root->val = 0;
root->left = NULL;
root->right = NULL;
return root;
}
// 建立二叉树
void createTree(TreeNode *root) {
int val;
printf("请输入结点的值(-1表示空结点):");
scanf("%d", &val);
if (val == -1) {
return;
}
root->val = val;
root->left = initTree();
root->right = initTree();
createTree(root->left);
createTree(root->right);
}
// 层次遍历二叉树
void levelOrder(TreeNode *root) {
if (root == NULL) {
return;
}
TreeNode *queue[1024];
int front = 0, rear = 0;
queue[rear++] = root;
while (front != rear) {
TreeNode *node = queue[front++];
printf("%d ", node->val);
if (node->left != NULL) {
queue[rear++] = node->left;
}
if (node->right != NULL) {
queue[rear++] = node->right;
}
}
}
int main() {
TreeNode *root = initTree();
createTree(root);
printf("层次遍历:");
levelOrder(root);
printf("\n");
return 0;
}
```
阅读全文