vs2022如何scanf一个二叉树
时间: 2023-06-13 14:08:10 浏览: 153
scanf 一个二叉树需要按照二叉树的遍历顺序进行输入,常见的遍历方式有前序遍历、中序遍历和后序遍历。一般采用前序遍历或中序遍历进行输入比较方便。
假设二叉树节点结构体如下:
```c
typedef struct node {
int val;
struct node *left;
struct node *right;
} Node;
```
以前序遍历的方式输入二叉树,输入格式如下:
```
val left_child right_child
```
其中 `val` 表示当前节点的值,`left_child` 表示当前节点的左子树,`right_child` 表示当前节点的右子树。如果当前节点没有左子树或右子树,可以输入 `-1` 表示空节点。
下面是一个示例输入:
```
1 2 -1 -1 3 4 -1 -1 5 -1 -1
```
这个输入表示的二叉树如下:
```
1
/ \
2 3
/ \
4 5
```
下面是一个读入二叉树的示例代码:
```c
Node* createTree() {
int val;
scanf("%d", &val);
if (val == -1) {
return NULL;
}
Node *root = (Node*)malloc(sizeof(Node));
root->val = val;
root->left = createTree();
root->right = createTree();
return root;
}
```
这个函数使用递归的方式读入二叉树,如果当前节点的值为 `-1`,表示当前节点为空节点,返回 `NULL`,否则创建一个新节点并且递归读入左子树和右子树,最后返回根节点。
阅读全文