P1305新二叉树洛谷题解

题目链接:

P1305

一道水题。

先定义一个变量n,存储节点数,然后定义一个变量tree_gen,存储树根位置,然后定义一个结构体,里面包含节点值以及数组里左右孩子的索引:

#include<bits/stdc++.h>
using namespace std;
int n,tree_gen; //节点数
struct tree{
    char jie;   //节点值
    int zuo,you;    //左右孩子索引
}a[256];    //数组

 接下来写一个先序遍历函数,并满足根左右的遍历顺序:

void xian(int x){   //根左右
    cout<<a[x].jie; //节点数
    if(a[x].zuo!=0){    //左孩子不为空节点
        xian(a[x].zuo);
    }
    if(a[x].you!=0){    //右孩子不为空节点
        xian(a[x].you);
    }
}

 最后是主函数,先输入节点数,然后遍历输入,在循环内临时定义三个变量,分别存储根节点,左孩子和右孩子,然后找到根的位置,并将节点位置赋值,左右如果不是*号,也就不是空的,是空的就赋值为0,最后调用函数先序输出:

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        char ch,z,y;
        cin>>ch>>z>>y;
        a[int(ch)].jie=ch;
        if(i==1){
            tree_gen=int(ch);
        }
        if(z!='*'){
            a[int(ch)].zuo=int(z);
        }
        else{
            a[int(ch)].zuo=0;
        }
        if(y!='*'){
            a[int(ch)].you=int(y);
        }
        else{
            a[int(ch)].you=0;
        }
    }
    xian(tree_gen);
    return 0;
}

最后放一下整体代码:

#include<bits/stdc++.h>
using namespace std;
int n,tree_gen; //节点数
struct tree{
    char jie;   //节点值
    int zuo,you;    //左右孩子索引
}a[256];    //数组
void xian(int x){   //根左右
    cout<<a[x].jie; //节点数
    if(a[x].zuo!=0){    //左孩子不为空节点
        xian(a[x].zuo);
    }
    if(a[x].you!=0){    //右孩子不为空节点
        xian(a[x].you);
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        char ch,z,y;
        cin>>ch>>z>>y;
        a[int(ch)].jie=ch;
        if(i==1){
            tree_gen=int(ch);
        }
        if(z!='*'){
            a[int(ch)].zuo=int(z);
        }
        else{
            a[int(ch)].zuo=0;
        }
        if(y!='*'){
            a[int(ch)].you=int(y);
        }
        else{
            a[int(ch)].you=0;
        }
    }
    xian(tree_gen);
    return 0;
}

 本人是第二次法题解,题解可能不是最优解,请莫要怪罪哈~

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值