C语言实现己知一棵以二叉链表方式存储的二叉树,编写代码求先序序列中第k个结点的值
时间: 2025-01-05 09:40:23 浏览: 6
在C语言中,我们可以使用递归的方式实现求二叉链表表示的二叉树的前序遍历,并找到第k个节点的值。首先,我们需要定义一个结构体`Node`来代表二叉树的节点,包括`value`存储节点值,`left`和`right`分别指向左子节点和右子节点。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int value;
struct Node* left;
struct Node* right;
} TreeNode;
// 前序遍历函数,返回当前路径上的节点数量
int preOrderCount(TreeNode* node) {
if (node == NULL) return 0;
return 1 + preOrderCount(node->left) + preOrderCount(node->right);
}
// 查找第k个节点的辅助函数,递归查找并更新计数
TreeNode* findKthNode(TreeNode* root, int k, int count) {
if (root == NULL || count == k) {
return root; // 如果达到k,或者到了空节点,返回当前节点
}
if (count > k) { // 还没到达目标位置,继续向左子树搜索
return findKthNode(root->left, k, count + 1 - preOrderCount(root->left));
} else { // 向右子树搜索
return findKthNode(root->right, k, count + 1);
}
}
// 主函数,输入树的根节点和k值,输出第k个节点的值
int main() {
// 假设已经有一个初始化好的二叉树
TreeNode* root = ...; // 实际上需要填充你手头的二叉树
int k;
printf("请输入你要查找的节点索引k: ");
scanf("%d", &k);
if (k <= 0 || !root || preOrderCount(root) < k) {
printf("错误,k值无效或树中节点数量小于k.\n");
return 1;
}
TreeNode* result = findKthNode(root, k, 0);
if (result != NULL) {
printf("第 %d 个节点的值是: %d\n", k, result->value);
} else {
printf("找不到第 %d 个节点。\n", k);
}
return 0;
}
```
阅读全文