核心:判断父节点的孩子是否为x,递归左右子树
BiTree findParent(BiTree T,char x) {
if(T==NULL || T->data==x) { //如果根节点为空或者根节点就是要查找的节点x,则不存在双亲节点
return NULL;
}
if ((T->lchild!=NULL && T->lchild->data==x) || (T->rchild!=NULL && T->rchild->data==x)) {
return T; // 如果根节点的左子节点或右子节点正好是要查找的节点x,则根节点就是双亲节点
}
BiTNode *parent = findParent(T->lchild, x);//递归在左子树中查找双亲节点
if (parent != NULL) {
return parent; //如果在左子树中找到了双亲节点,则返回该节点
}
return findParent(T->rchild, x);// 否则递归在右子树中查找双亲节点
}