輸出利用先序遍歷創建的二叉樹中的指定結點的雙親結點
1000(ms)
10000(kb)
2399 / 5536
利用先序遞歸遍歷算法創建二叉樹並輸出該二叉樹中指定結點的雙親結點。約定二叉樹結點數據爲單個大寫英文字符。當接收的數據是字符“#”時表示該結點不需要創建,否則創建該結點。最後再輸出創建完成的二叉樹中的指定結點的雙親結點。注意輸入數據序列中的“#”字符和非“#”字符的序列及個數關係,這會最終決定創建的二叉樹的形態。
輸入
輸入用例分2行輸入,第一行接受鍵盤輸入的由大寫英文字符和“#”字符構成的一個字符串(用於創建對應的二叉樹),第二行爲指定的結點數據。
輸出
用一行輸出該用例對應的二叉樹中指定結點的雙親結點。若相應雙親結點不存在則以“#”代替。
樣例輸入
A## A ABC#### B
樣例輸出
# A
#include<stdio.h>
#include<malloc.h>
struct BTNode
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
};
void PreOrder(struct BTNode *&p)//先序遍歷創建二叉樹
{
char a;
scanf("%c",&a);
if(a=='#') p=NULL;
else
{
p=(struct BTNode*)malloc(sizeof(struct BTNode));
p->data=a;
PreOrder(p->lchild);
PreOrder(p->rchild);
}
}
void SearchBT(struct BTNode *p,int data)//查找指定雙親結點
{
if(p!=NULL)
{
if(p->lchild!=NULL&&p->lchild->data==data||p->rchild!=NULL&&p->rchild->data==data)
printf("%c",p->data);
else
{
SearchBT(p->lchild,data);
SearchBT(p->rchild,data);
}
}
}
int main()
{
struct BTNode *p;
PreOrder(p);
getchar();//抵消回車字符
char data;
scanf("%c",&data);
if(p->data==data) printf("#");
else SearchBT(p,data);
}