二叉链表存储求值为X的结点,并求所在层数,用C语言写出代码
时间: 2024-12-19 22:25:33 浏览: 3
在C语言中,我们可以设计一个数据结构,比如一个`Node`结构体表示二叉链表的节点,每个节点包含一个整数值`val`和两个指向其他节点的指针`left`和`right`。对于查找求值为`X`的节点并计算其所在的层数,我们需要遍历整个链表,同时维护一个层次计数。以下是简单的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉链表节点结构
typedef struct Node {
int val;
struct Node* left;
struct Node* right;
} Node;
// 功能:创建新节点
Node* createNode(int val) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->val = val;
newNode->left = newNode->right = NULL;
return newNode;
}
// 功能:递归遍历链表并计算层级
int findLevelAndNode(Node* root, int target, int level) {
if (root == NULL) {
return -1; // 结束递归,未找到目标
}
if (root->val == target) {
printf("Found node with value %d at level %d\n", target, level);
return level;
}
int leftLevel = findLevelAndNode(root->left, target, level + 1); // 左孩子
int rightLevel = findLevelAndNode(root->right, target, level + 1); // 右孩子
// 返回较大的层级(如果两边都找到了,则返回较大的)
return leftLevel > rightLevel ? leftLevel : rightLevel;
}
int main() {
// 创建一个示例二叉链表
Node* root = createNode(5);
root->left = createNode(3);
root->right = createNode(8);
root->left->left = createNode(2);
root->left->right = createNode(4);
root->right->left = createNode(7);
root->right->right = createNode(9);
int target = 7; // 搜索的目标值
int level = findLevelAndNode(root, target, 0);
if (level == -1) {
printf("Target node not found in the tree.\n");
}
return 0;
}
```
在这个例子中,我们首先创建了一个二叉树结构,然后通过`findLevelAndNode`函数寻找目标值并计算它的层级。如果找不到目标节点,函数会返回-1。
阅读全文