P1305 新二叉树(带点疑惑)

题目描述
输入一串二叉树,输出其前序遍历。
输入格式
第一行为二叉树的节点数 n。(1≤n≤26)
后面 n 行,每一个字母为节点,后两个字母分别为其左右儿子。
空节点用 * 表示
输出格式
二叉树的前序遍历。
输入输出样例
输入
6
abc
bdi
cj*
d**
i**
j**
输出
abdicj

这个题没啥特殊,就是新手熟悉基础用法

直接用搜索

#include <iostream>
#include <algorithm>
#include <map>
#include <cmath>
#include <cstdio>
#include <string>

using namespace std;

struct node
{
     char value,l,r;
}a[200];
void preorder(char root)
{
   if(root)//必不可少
   {
         cout<<root;//输出当前节点
         preorder(a[root].l);
         preorder(a[root].r);
   }
}
int main()
{
    int n;
    cin>>n;
    string t;
    cin>>t;
    char root;
    root=t[0];
    if(t[1]!='*') a[t[0]].l=t[1];
    if(t[2]!='*') a[t[0]].r=t[2];
    for(int i=1;i<n;i++)
    {
        cin>>t;
        if(t[1]!='*') a[t[0]].l=t[1];//节点的左孩子
        if(t[2]!='*') a[t[0]].r=t[2];//节点的右孩子
    }
    preorder(root);
    return 0;
}

传指针
大同小异,先看上面呢种方法更好理解一点

#include <iostream>
#include <algorithm>
#include <map>
#include <cmath>
#include <cstdlib>
#include <string>

using namespace std;

struct node
{
     char value;
     node *l,*r ;
     //node(int value = 0,node *l=NULL,node *r =NULL):value(value),l(l),r(r){}//构造函数
}a[200];
node *root;
void preorder(node *root)
{
   if(root!=NULL)
   {
         cout<<root->value;//输出当前节点
         preorder(root->l);
         preorder(root->r);
   }
}
int main()
{
    for(int i=0;i<200;i++) a[i].value=i;//初始化
    int n;
    cin>>n;
    char t[5];
    cin>>t;
    root=&a[t[0]];
    if(t[1]!='*') a[t[0]].l=&a[t[1]];
    if(t[2]!='*') a[t[0]].r=&a[t[2]];
    for(int i=1;i<n;i++)
    {
        cin>>t;
        if(t[1]!='*') a[t[0]].l=&a[t[1]];//节点的左孩子
        if(t[2]!='*') a[t[0]].r=&a[t[2]];//节点的右孩子
    }
    preorder(root);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值