题目描述
利用先序递归遍历算法创建二叉树并输出该二叉树中指定结点的儿子结点。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#“时表示该结点不需要创建,否则创建该结点。最后再输出创建完成的二叉树中的指定结点的儿子结点。注意输入数据序列中的”#“字符和非”#"字符的序列及个数关系,这会最终决定创建的二叉树的形态。
输入
输入用例分2行输入,第一行接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树),第二行为指定的结点数据。
输出
用一行输出该用例对应的二叉树中指定结点的儿子结点,格式为:L:,R:。若相应儿子不存在则以"#"。
样例输入
A##
A
ABC####
B
样例输出
L:#,R:#
L:C,R:#
- 首先当然需要应用先序遍历算法创建二叉树,再来找出指定节点的孩子节点
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct Node{
char data;
struct Node *l,*r;
}Tree;
void Create(Tree *&T)//创建二叉树
{
char ch;
cin>>ch;
if(ch=='#')
{
T=NULL;return ;
}
T=new Tree;
T->data=ch;
T->l=NULL;
T->r=NULL;
Create(T->l);
Create(T->r);
}
void Search(Tree *T,char ch,Tree *&q)//查找指定节点的孩子节点
{
if(T==NULL)
return;
if(T->data==ch)
q=T;
else
{
Search(T->l,ch,q);
Search(T->r,ch,q);
}
}
int main()
{
Tree *T;
Create(T);
char ch;
cin>>ch;
Tree *q;//定义另一棵树(子树)
Search(T,ch,q);
if(q->l==NULL)
cout<<"L:#"<<",";
else
cout<<"L:"<<q->l->data<<",";
if(q->r==NULL)
cout<<"R:#";
else
cout<<"R:"<<q->r->data;
return 0;
}
如有错误,感谢伙伴们指正