用c语言写 查找指定节点所在层数 功能:从根节点开始,到每层寻找和输入data相同的元素,找到后返回data所在的层数(根节点为第一层) 从插入节点的函数insertNode中可以看出,每一层只有两个数据, 小的数据是上一层的左孩子,大的是右孩子. 参数:Bitree root是查找的树,int data是要查找的数据 返回值:int data所在的层数。
时间: 2024-03-10 15:43:24 浏览: 134
可以使用广度优先搜索(BFS)算法来实现查找指定节点所在层数的功能。代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int data; // 数据
struct TreeNode* left; // 左孩子
struct TreeNode* right; // 右孩子
} TreeNode;
// 插入节点函数
void insertNode(TreeNode** root, int data) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = data;
node->left = NULL;
node->right = NULL;
if (*root == NULL) { // 如果树为空,新节点为根节点
*root = node;
} else { // 否则,找到新节点的位置并插入
TreeNode* curr = *root;
while (1) {
if (data < curr->data) {
if (curr->left == NULL) {
curr->left = node;
break;
} else {
curr = curr->left;
}
} else {
if (curr->right == NULL) {
curr->right = node;
break;
} else {
curr = curr->right;
}
}
}
}
}
// 查找指定节点所在层数函数
int findNodeLevel(TreeNode* root, int data) {
if (root == NULL) { // 如果树为空,返回0
return 0;
}
int level = 1; // 初始化层数为1
TreeNode* curr = root;
while (curr != NULL) {
if (data == curr->data) { // 找到节点,返回层数
return level;
} else if (data < curr->data) { // 在左子树中查找
curr = curr->left;
level++;
} else { // 在右子树中查找
curr = curr->right;
level++;
}
}
return 0; // 没有找到节点,返回0
}
int main() {
// 测试代码
TreeNode* root = NULL;
insertNode(&root, 5);
insertNode(&root, 3);
insertNode(&root, 7);
insertNode(&root, 2);
insertNode(&root, 4);
insertNode(&root, 6);
insertNode(&root, 8);
int data = 6;
int level = findNodeLevel(root, data);
printf("%d is at level %d\n", data, level);
data = 1;
level = findNodeLevel(root, data);
printf("%d is at level %d\n", data, level);
return 0;
}
```
在这个示例代码中,我们首先定义了二叉树节点结构体 `TreeNode`,其中包含了节点的数据 `data`、左孩子指针 `left` 和右孩子指针 `right`。然后,我们定义了插入节点函数 `insertNode`,它可以将新节点插入到二叉搜索树中的正确位置。最后,我们定义了查找指定节点所在层数的函数 `findNodeLevel`,它使用广度优先搜索算法遍历树的每一层,查找和指定数据相同的节点,并返回其所在的层数。
在 `main` 函数中,我们创建了一个二叉搜索树,并测试了 `findNodeLevel` 函数的功能。
阅读全文