求二叉树某结点的双亲,如果找到,打印双亲结点的值,如果无双亲,打印“no parent”,的完整代码,用c语言
时间: 2024-05-13 20:19:48 浏览: 15
以下是求二叉树某结点的双亲的完整代码,使用了链式存储结构:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点定义
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建二叉树
TreeNode* createTree() {
int val;
scanf("%d", &val);
if (val == -1) { // -1 表示空结点
return NULL;
}
TreeNode* root = (TreeNode*) malloc(sizeof(TreeNode));
root->val = val;
root->left = createTree();
root->right = createTree();
return root;
}
// 查找结点的双亲
void findParent(TreeNode* root, int target, TreeNode* parent) {
if (root == NULL) {
return;
}
if (root->val == target) {
if (parent == NULL) {
printf("no parent\n");
} else {
printf("%d\n", parent->val);
}
}
findParent(root->left, target, root);
findParent(root->right, target, root);
}
int main() {
TreeNode* root = createTree();
int target;
scanf("%d", &target);
findParent(root, target, NULL);
return 0;
}
```
在上述代码中,我们通过递归地遍历二叉树来查找目标结点,并在找到目标结点时打印其双亲结点的值。由于需要记录每个结点的双亲结点,我们在递归遍历时传入 parent 指针来记录。当我们找到目标结点时,判断其是否有双亲结点即可完成题目要求。