请用C语言写下面的代码,要求如下按先序次序建立一棵二叉树(二叉链表),然后输出先序遍历结果的第k个结点值
时间: 2024-05-11 08:16:45 浏览: 147
C语言 求一个二叉树中位于先序序列中第k个位置的结点的值.doc
好的,以下是您所需的代码:
```
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点的结构体
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 先序遍历二叉树,返回第k个访问到的结点的值
char preOrder(TreeNode *root, int k) {
static int count = 0;
if (root == NULL) {
return '\0';
}
if (++count == k) { // 找到了第k个结点
return root->data;
}
char left = preOrder(root->left, k);
if (left != '\0') { // 第k个结点在左子树中
return left;
}
return preOrder(root->right, k); // 第k个结点在右子树中
}
int main() {
// 按先序次序建立一棵二叉树
TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));
root->data = 'A';
root->left = (TreeNode *)malloc(sizeof(TreeNode));
root->left->data = 'B';
root->left->left = (TreeNode *)malloc(sizeof(TreeNode));
root->left->left->data = 'D';
root->left->left->left = NULL;
root->left->left->right = NULL;
root->left->right = (TreeNode *)malloc(sizeof(TreeNode));
root->left->right->data = 'E';
root->left->right->left = NULL;
root->left->right->right = NULL;
root->right = (TreeNode *)malloc(sizeof(TreeNode));
root->right->data = 'C';
root->right->left = (TreeNode *)malloc(sizeof(TreeNode));
root->right->left->data = 'F';
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = (TreeNode *)malloc(sizeof(TreeNode));
root->right->right->data = 'G';
root->right->right->left = NULL;
root->right->right->right = NULL;
// 输出先序遍历结果的第k个结点值
int k = 3;
char result = preOrder(root, k);
if (result != '\0') {
printf("The value of the %dth node in the preorder traversal is %c\n", k, result);
}
else {
printf("The %dth node does not exist in the binary tree\n", k);
}
return 0;
}
```
在这个程序中,我定义了一个 `TreeNode` 结构体来表示二叉树的结点。 `preOrder` 函数用于先序遍历二叉树,同时记录已经访问的结点数量,直到访问到第k个结点时返回其值。在 `main` 函数中,我按先序次序手动构造了一棵二叉树,并调用 `preOrder` 函数来输出指定位置的结点值。
阅读全文