用C语言,先序遍历创建一个二叉树,用0表示空指针,然后查找某个节点的父节点并输出该父节点
时间: 2024-12-18 09:35:05 浏览: 4
在二叉树或更复杂的树形结构中,先序输出叶结点.txt
在C语言中,我们可以通过先序遍历的方式创建一个二叉树,并使用递归的方法查找某个节点的父节点。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树的函数
TreeNode* createBinaryTree() {
int val;
scanf("%d", &val);
if (val == 0) {
return NULL; // 用0表示空指针
}
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = createBinaryTree(); // 创建左子树
node->right = createBinaryTree(); // 创建右子树
return node;
}
// 查找某个节点的父节点的函数
TreeNode* findParent(TreeNode* root, int target, TreeNode* parent) {
if (root == NULL) {
return NULL;
}
if ((root->left && root->left->val == target) || (root->right && root->right->val == target)) {
return root; // 找到目标节点的父节点
}
TreeNode* leftResult = findParent(root->left, target, root);
if (leftResult != NULL) {
return leftResult;
}
return findParent(root->right, target, root);
}
int main() {
printf("请输入二叉树的先序遍历序列(用0表示空节点):\n");
TreeNode* root = createBinaryTree();
int target;
printf("请输入要查找父节点的节点值:\n");
scanf("%d", &target);
TreeNode* parent = findParent(root, target, NULL);
if (parent != NULL) {
printf("节点 %d 的父节点是 %d\n", target, parent->val);
} else {
printf("未找到节点 %d 的父节点\n", target);
}
return 0;
}
```
### 代码说明:
1. **TreeNode结构体**:定义了二叉树节点的结构,包括节点的值、左子节点和右子节点。
2. **createBinaryTree函数**:通过先序遍历的方式创建二叉树。如果输入为0,则返回NULL表示空节点。
3. **findParent函数**:递归地查找某个节点的父节点。如果当前节点的左子节点或右子节点为目标节点,则返回当前节点作为父节点。否则,继续在左右子树中查找。
4. **main函数**:读取用户输入的先序遍历序列来创建二叉树,然后读取要查找父节点的目标值,并调用`findParent`函数查找并输出结果。
### 使用方法:
1. 运行程序后,按照提示输入二叉树的先序遍历序列(用0表示空节点)。
2. 输入要查找父节点的节点值。
3. 程序会输出该节点的父节点值。
阅读全文