用c语言编写程序,可以手动输入二叉树并对二叉树进行先序遍历,并打印层号。
时间: 2024-01-23 19:12:27 浏览: 82
根据带空指针的先序遍历结果建立二叉树
以下是用C语言编写的程序,可以手动输入二叉树并对二叉树进行先序遍历,并打印层号:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点定义
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树
TreeNode* createBinaryTree() {
TreeNode *root = NULL;
int val;
printf("请输入根节点的值(-1表示节点为空):");
scanf("%d", &val);
if (val == -1) { // 空节点
return root;
}
root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = val;
root->left = createBinaryTree(); // 递归创建左子树
root->right = createBinaryTree(); // 递归创建右子树
return root;
}
// 先序遍历二叉树并打印层号
void preOrderTraversal(TreeNode *root, int level) {
if (root == NULL) {
return;
}
printf("第%d层: %d\n", level, root->data); // 打印结点值和层号
preOrderTraversal(root->left, level+1); // 递归遍历左子树,层号加1
preOrderTraversal(root->right, level+1); // 递归遍历右子树,层号加1
}
int main() {
TreeNode *root = createBinaryTree();
printf("\n先序遍历结果:\n");
preOrderTraversal(root, 1);
return 0;
}
```
在程序中,我们首先定义了二叉树结点的结构体 `TreeNode`,包括结点的值 `data`,左子树指针 `left` 和右子树指针 `right`。
接着,我们定义了一个 `createBinaryTree` 函数,用于手动输入二叉树。在函数中,我们先输入根节点的值,如果根节点的值为 `-1`,则返回空节点;否则,我们创建一个新的结点,并递归创建左子树和右子树。
最后,我们定义了一个 `preOrderTraversal` 函数,用于先序遍历二叉树并打印层号。在函数中,我们先打印当前结点的值和层号,然后递归遍历左子树和右子树,层号加1。
在 `main` 函数中,我们先调用 `createBinaryTree` 函数创建二叉树,然后调用 `preOrderTraversal` 函数进行先序遍历并打印层号。
阅读全文