按先序次序建立一棵二叉树(二叉链表),然后输出先序遍历结果的第k个结点值(c++实现)
时间: 2024-05-14 19:15:41 浏览: 118
好的,让我来解决这个问题。下面是一个使用C语言实现的先序遍历二叉树并输出第k个结点值的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点定义
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树
void createTree(TreeNode **root) {
int value;
scanf("%d", &value);
if (value == -1) {
*root = NULL;
} else {
*root = (TreeNode *) malloc(sizeof(TreeNode));
(*root)->val = value;
createTree(&((*root)->left));
createTree(&((*root)->right));
}
}
// 先序遍历并输出第k个结点的值
void preorder(TreeNode *root, int k, int *count) {
if (root) {
(*count)++;
if (*count == k) {
printf("第%d个结点的值是 %d\n", k, root->val);
}
preorder(root->left, k, count);
preorder(root->right, k, count);
}
}
int main() {
TreeNode *root = NULL;
printf("请输入二叉树的先序遍历序列(-1表示空结点):\n");
createTree(&root);
int k, count = 0;
printf("请输入要输出的结点的序号:\n");
scanf("%d", &k);
preorder(root, k, &count);
if (count < k) {
printf("序号 %d 超出二叉树的结点数范围!\n", k);
}
return 0;
}
```
输入格式如下:
```
请输入二叉树的先序遍历序列(-1表示空结点):
1 2 4 -1 -1 5 -1 -1 3 -1 -1
请输入要输出的结点的序号:
3
```
输出结果如下:
```
第3个结点的值是 4
```
注意,该代码仅适用于二叉树中结点值均为正整数的情况。如果存在负数结点值,则需要修改判断条件。
阅读全文