PTA L2-006 树的遍历

给出了一个二叉树的后续遍历和中序遍历,求它的层序遍历。

先弄清楚步骤:

1.由后序遍历和中序遍历来还原二叉树;

2.借助栈来实现bfs,从而实现层序遍历:

这道题的的关键在于如何还原二叉树,

大体的思路是:1.先由后序遍历来确定根节点,再从中序遍历里找到该根节点位置,

2.由中序遍历的位置来确定左子树的元素的个数,这样右子树的个数也可计算出来。

3.将左子树和右子树调用还原的函数,最后得出原二叉树。

4.借助栈来实现bfs,完成层序遍历。

#include<bits/stdc++.h>
using namespace std;
typedef struct Node{
    int data;
    Node* left;
    Node* right;
}*BinTree;
int h[31],z[31];
queue<BinTree> q;
int flag =0;//标记是否输出过.

int find(int x){
    int l=0;
    while(z[l] != x){
        l++;
    }
    return l;
}

//zl,zr表示先序遍历数组的左右
//hl,hr表示后序遍历的数组左右
BinTree solve(int zl,int zr,int hl,int hr){
    if(zl>zr) return nullptr;
    BinTree nbt = new Node;
    nbt ->data = h[hr];
    int pos = find(nbt->data);
    int lnum = pos - zl;//左子树的元素的个数
    nbt->left = solve(zl,pos-1,hl,hl+lnum-1);
    nbt->right = solve(pos+1,zr,hl+lnum,hr-1);
    return nbt;
}
void bfs(){
    while(!q.empty()){
        BinTree t = q.front();
        q.pop();
        if(flag ==0){
            flag =1;
        }else{
            cout<<" ";
        }
        cout<<t->data;
        if(t->left) q.push(t->left);
        if(t->right) q.push(t->right);
    }
    
    
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin>>n;

    for(int i=0;i<n;i++){
        cin>>h[i];
    }
    for(int i=0;i<n;i++){
        cin>>z[i];
    }
    BinTree bt = solve(0,n-1,0,n-1);
    q.push(bt);
    bfs();
}

全部评论

相关推荐

03-19 09:30
门头沟学院 Java
刷到这个话题真的狠狠共情了,谁懂啊,一边实习一边找下家的日子,每天都在演谍战片。白天在工位上,电脑永远分屏,一半是实习的日报和需求文档,一半是招聘网站,leader&nbsp;一过来,秒切页面,手速练得比打游戏还快;开会的时候,手机藏在桌子底下,偷偷刷新招聘软件,看有没有新的岗位和回复,生怕错过&nbsp;HR&nbsp;的消息;午休时间,别人都在趴着睡觉,我抱着手机躲在消防通道里接面试电话,压着声音说话,生怕被同事听见,连大气都不敢喘;晚上下班挤完地铁回到出租屋,连饭都顾不上吃,先对着&nbsp;JD&nbsp;改简历、做笔试、准备面试,经常熬到凌晨一两点,第二天还要强打精神去上班。最煎熬的不是累,是那种两头悬着的焦虑。实习这边,要装成认真干活的样子,不敢摸鱼太明显,怕被&nbsp;leader&nbsp;发现,丢了这份保底的实习;找下家那边,投出去的简历石沉大海,面试面完没回音,每天都在自我怀疑,怕自己跳不出去,只能困在这份没成长的实习里。身边的同学要么已经拿到了满意的&nbsp;offer,要么安安稳稳在实习转正,只有我,每天在工位上演戏,在出租屋里焦虑,两头跑,两头都不敢松懈。有时候也会想,要不要干脆辞了专心找,可又怕裸辞之后更焦虑,没了收入,也没了保底的退路,只能咬着牙继续熬。
如何一边实习一边找下家?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务