按先序次序建立一棵二叉树(二叉链表),然后输出先序遍历结果的第k个结点值C语言
时间: 2024-05-07 22:17:06 浏览: 120
C语言 求一个二叉树中位于先序序列中第k个位置的结点的值.doc
代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_NODES 100 // 二叉树最大节点数
// 二叉链表节点结构体
typedef struct node {
char data;
struct node *left;
struct node *right;
} TreeNode;
int count = 0; // 当前节点计数器
// 构建二叉树
void buildTree(TreeNode **root) {
char data;
scanf("%c", &data);
if (data == '#') {
*root = NULL;
} else {
*root = (TreeNode *)malloc(sizeof(TreeNode));
(*root)->data = data;
buildTree(&(*root)->left);
buildTree(&(*root)->right);
}
}
// 先序遍历找出第k个结点值
void preOrder(TreeNode *root, int k, char *res) {
if (root) {
if (++count == k) {
*res = root->data;
return;
}
preOrder(root->left, k, res);
preOrder(root->right, k, res);
}
}
int main() {
TreeNode *root = NULL;
printf("请输入先序序列(以#代表空节点):\n");
buildTree(&root);
int k;
printf("请输入k的值:\n");
scanf("%d", &k);
char res;
preOrder(root, k, &res);
printf("先序遍历结果中第%d个结点的值为%c\n", k, res);
return 0;
}
```
需要注意的是,输入先序序列时,每个字符后需要加上空格或回车,否则程序将误以为当前输入的是下一位数的最高位。另外,需要注意树的节点数不能超过`MAX_NODES`。
阅读全文