c语言算法求二叉树中一个非根结点的双亲结点代码
时间: 2024-05-10 14:19:58 浏览: 110
以下是C语言算法,求二叉树中一个非根节点的双亲结点的代码:
```c
typedef struct Node { // 定义二叉树结点
int data;
struct Node *lchild, *rchild;
} Node, *Tree;
Tree search(Tree root, int x) { // 查找结点x所在的位置
if (root == NULL || root->data == x) {
return root;
}
Tree lres = search(root->lchild, x);
if (lres != NULL) {
return lres;
}
Tree rres = search(root->rchild, x);
if (rres != NULL) {
return rres;
}
return NULL;
}
Tree parent(Tree root, int x) { // 查找结点x的父节点
if (root == NULL || root->data == x) {
return NULL;
}
if (root->lchild && root->lchild->data == x) {
return root;
}
if (root->rchild && root->rchild->data == x) {
return root;
}
Tree lres = parent(root->lchild, x);
if (lres != NULL) {
return lres;
}
Tree rres = parent(root->rchild, x);
if (rres != NULL) {
return rres;
}
return NULL;
}
```
使用方法:
假设已知二叉树的根节点为`root`,要查找某个结点的父节点,可以先调用`search`函数查找该结点所在的位置,然后再调用`parent`函数查找其父节点。
示例代码:
```c
Tree root = ...; // 初始化根节点
int x = ...; // 要查找父节点的结点
Tree p = search(root, x);
if (p == NULL) {
printf("结点不存在\n");
} else if (p == root) {
printf("该结点没有父节点\n");
} else {
Tree q = parent(root, x);
printf("父节点为%d\n", q->data);
}
```
阅读全文