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