在C语言中,使用递归的深度优先搜索(DFS)算法返回节点本身,可以通过以下代码实现:
#include <stdio.h>
// 定义节点结构
struct Node {
int data;
struct Node* left;
struct Node* right;
};
// 创建新节点
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (newNode == NULL) {
printf("内存分配失败\n");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 递归DFS返回节点本身
struct Node* dfs(struct Node* node, int target) {
if (node == NULL) {
return NULL;
}
if (node->data == target) {
return node;
}
struct Node* leftResult = dfs(node->left, target);
if (leftResult != NULL) {
return leftResult;
}
struct Node* rightResult = dfs(node->right, target);
if (rightResult != NULL) {
return rightResult;
}
return NULL;
}
int main() {
// 构建二叉树
struct Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
// 在二叉树中查找节点值为5的节点
struct Node* result = dfs(root, 5);
if (result != NULL) {
printf("找到了节点 %d\n", result->data);
} else {
printf("未找到目标节点\n");
}
return 0;
}
这段代码中,我们定义了一个二叉树的节点结构,并实现了创建新节点的函数。然后,我们定义了递归的深度优先搜索函数dfs()
,该函数接收一个节点和目标值作为参数,返回找到的节点指针或NULL。
在dfs()
函数中,首先检查当前节点是否为NULL,如果是则返回NULL。然后,检查当前节点的值是否等于目标值,如果是则返回当前节点指针。如果不是,则递归调用dfs()
函数分别在左子树和右子树中搜索目标节点。如果左子树中找到了目标节点,返回左子树中的结果;如果右子树中找到了目标节点,返回右子树中的结果。如果左右子树中都未找到目标节点,返回NULL。
最后,在main()
函数中创建一个二叉树,并调用dfs()
函数查找值为5的节点。如果找到了节点,输出节点值;否则输出未找到目标节点的消息。
这种递归的深度优先搜索算法在树、图等数据结构中广泛应用,用于查找特定节点或遍历整个结构。腾讯云提供了丰富的云计算产品,例如云服务器、云数据库、云存储等,可以根据具体需求选择合适的产品来支持开发和部署。你可以访问腾讯云官网获取更详细的产品介绍和使用说明:腾讯云官网。
领取专属 10元无门槛券
手把手带您无忧上云