习题6-查找给定结点的双亲结点.c

来自「数据结构各章实验源代码; 数据结构实验源代码」· C语言 代码 · 共 50 行

C
50
字号
#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 + =
减小字号Ctrl + -
显示快捷键?