输出一个指定结点在二叉树的层次,给出C语言代码
时间: 2024-09-29 15:05:00 浏览: 35
在C语言中,我们可以使用队列数据结构来实现二叉树的层次遍历并输出指定节点所在层次。这里提供一个基本的示例,假设我们有一个简单的二叉树结构和一个函数用于查找特定节点:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建一个新的节点
TreeNode* createNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 深度优先搜索寻找目标节点,并返回当前层数
int findNodeInLevel(TreeNode* root, int target, int level, TreeNode** foundNode) {
if (root == NULL) return -1; // 如果根为空,返回-1
if (root->val == target) { // 找到目标节点
*foundNode = root;
return level;
}
// 递归查找左子树和右子树
int leftResult = findNodeInLevel(root->left, target, level + 1, foundNode);
int rightResult = findNodeInLevel(root->right, target, level + 1, foundNode);
// 返回找到的目标节点所在的最小层
return (leftResult >= 0 && rightResult >= 0) ? leftResult : (leftResult > rightResult ? rightResult : -1);
}
// 主函数示例,输入树根和目标值,输出目标节点所在的层
void printNodeLevel(TreeNode* root, int target) {
TreeNode* foundNode = NULL;
int nodeLevel = findNodeInLevel(root, target, 0, &foundNode);
if (nodeLevel != -1) {
printf("目标节点 %d 的位置在第 %d 层\n", target, nodeLevel);
} else {
printf("找不到目标节点 %d\n", target);
}
}
// 示例:创建一个简单的二叉树并测试
int main() {
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
printNodeLevel(root, 4); // 查找节点4的位置
printNodeLevel(root, 6); // 查找不存在的节点6
return 0;
}
```
这个代码首先定义了一个简单的二叉树结构,然后实现了`findNodeInLevel`函数用于查找目标节点并记录其所在层次。在主函数`printNodeLevel`中,你可以替换实际的树根和目标值来进行测试。
阅读全文