题目描述
利用先序递归遍历算法创建二叉树并输出该二叉树中指定结点的双亲结点。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符“#”时表示该结点不需要创建,否则创建该结点。最后再输出创建完成的二叉树中的指定结点的双亲结点。注意输入数据序列中的“#”字符和非“#”字符的序列及个数关系,这会最终决定创建的二叉树的形态。
输入
输入用例分2行输入,第一行接受键盘输入的由大写英文字符和“#”字符构成的一个字符串(用于创建对应的二叉树),第二行为指定的结点数据。
输出
用一行输出该用例对应的二叉树中指定结点的双亲结点。若相应双亲结点不存在则以“#”代替。
样例输入复制
A## A ABC#### B
样例输出复制
# A
这道题也可以用数组模拟二叉树,28行,这类型的题目用数组实在是太香了;解释在我的注释里,希望可以对你们有帮助;
#includeusing namespace std; char a[100]={'0'};//定义全局变量 void create(int i) { char data; cin>>data; if(data!='#') { a[i]=data; create(2*i);//递归创建左孩子 create(2*i+1);//递归创建右孩子 } } int main() { create(1);//把二叉树的根放在数组下标为1的位置上,这样左孩子就直接是2*i而不是2*i+1 char key; cin>>key; for(int i=1;i<100;i++) { if(a[i]==key)//在数组中查找key值对应的结点 { if(a[i/2]>='A'&&a[i/2]<='Z') cout<



