C语言求中序遍历第K个结点的值代码,并解释
时间: 2024-10-21 08:10:39 浏览: 32
在C语言中,为了找到二叉树中序遍历的第k个节点,我们可以使用递归的方式实现。首先,我们需要有一个辅助函数`findKthNode`,它会接受一个二叉树结构体、当前遍历到的节点指针以及k值作为参数。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 中序遍历并获取第k个节点值的辅助函数
TreeNode* findKthNode(TreeNode* root, int k) {
if (root == NULL || k <= 0) return NULL; // 树为空或k小于1直接返回NULL
// 递归左子树,直到k减小到0或者到达叶子节点
TreeNode* leftKth = findKthNode(root->left, k);
// 如果k已经减到0,说明我们已经找到了第k个节点(如果是左子树)
if (leftKth != NULL) return leftKth;
// 否则,k仍然大于0,继续递归右子树,并更新k
k--; // 因为已经访问了左子树,所以k减少1
return (k > 0) ? findKthNode(root->right, k) : root; // 返回当前节点
}
// 主函数示例
int main() {
// 初始化你的二叉树实例
TreeNode* tree = ...; // 你需要提供实际的二叉树创建代码
int k;
printf("请输入要查找的第k个节点的位置(1-based): ");
scanf("%d", &k);
TreeNode* result = findKthNode(tree, k - 1); // 注意这里需要k-1,因为索引从1开始计数
if (result != NULL) {
printf("第 %d 个节点的值是: %d\n", k, result->val);
} else {
printf("找不到第 %d 个节点。\n", k);
}
free(result); // 释放内存
return 0;
}
```
在这个代码中,用户输入的是1为基础的k值,所以在`findKthNode`函数里,我们需要将`k`减去1。注意这个代码假设二叉树是非空的,并且每个节点都已正确初始化。
阅读全文