栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

SWUST OJ 1052: 输出利用先序遍历创建的二叉树中的指定结点的双亲结点

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SWUST OJ 1052: 输出利用先序遍历创建的二叉树中的指定结点的双亲结点

题目描述

利用先序递归遍历算法创建二叉树并输出该二叉树中指定结点的双亲结点。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符“#”时表示该结点不需要创建,否则创建该结点。最后再输出创建完成的二叉树中的指定结点的双亲结点。注意输入数据序列中的“#”字符和非“#”字符的序列及个数关系,这会最终决定创建的二叉树的形态。

输入

输入用例分2行输入,第一行接受键盘输入的由大写英文字符和“#”字符构成的一个字符串(用于创建对应的二叉树),第二行为指定的结点数据。

输出

用一行输出该用例对应的二叉树中指定结点的双亲结点。若相应双亲结点不存在则以“#”代替。

样例输入复制

A##
A
ABC####
B

样例输出复制

#
A

这道题也可以用数组模拟二叉树,28行,这类型的题目用数组实在是太香了;解释在我的注释里,希望可以对你们有帮助;

#include 
using 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<

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号