📄 习题6-查找给定结点的双亲结点.c
字号:
#include "datastru.h"
#include <stdio.h>
#include <malloc.h>
#include "二叉树.c"
BTCHINALR *search_ch(BTCHINALR *cur, char x){
/*先序查找:在以cur为根的子树中查找值为x的结点是否存在*/
BTCHINALR *temp;
if(cur==NULL) return NULL;
if(x == cur->data) return cur;
temp = search_ch(cur->lchild,x);
if (temp != NULL) return temp;
else return search_ch(cur->rchild,x);
};
BTCHINALR *parent(BTCHINALR *start, BTCHINALR *current){
/*从start所指结点起查找当前结点current的父亲结点*/
BTCHINALR *p;
if(start==NULL)return NULL;
if(start->lchild==current||start->rchild==current)return start;
p=parent(start->lchild,current);
if(p!=NULL) return p;
else return parent(start->rchild,current);
}
main()
{
BTCHINALR *bt, *p, *temp;
char ch;
int i;
bt=createbt(); //建立二叉树,根为bt
fflush(stdin);
i = 1;
while(i){
printf("\n输入结点数据: "); scanf("%c",&ch);
p = search_ch(bt,ch);
if(p == NULL) printf("\n无此结点\n\n");
else {if(p == bt) printf("\n无双亲结点,是根结点\n\n");
else { temp = parent(bt,p);
printf("\n%c 的双亲结点是%c\n\n",ch,temp->data);}}
printf("\n继续操作吗?(继续按1键,结束按0键): \n");
fflush(stdin);
scanf("%d",&i);
fflush(stdin);}
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -