1102 Invert a Binary Tree (25 分)静态二叉树可以在输入时建好,然后遍历的时候先访问柚子树即可

#include<iostream>
#include<queue>
#include<sstream>
#include<cstring>
using namespace std;
int N;
struct node{
    
    
    int data,left,right;
}n[100];
bool isexist[100]={
    
    false};
int num=0;
void inorder(int root){
    
    
    if(root==-1)
        return;
    //if(n[root].right!=-1)
    inorder(n[root].right);                    //这里不要判断,不然会一直运行不了return
    cout<<n[root].data;
    num++;
    if(num<N)
        cout<<" ";
   // if(n[root].left!=-1)  
    inorder(n[root].left);
}
int num1;
void layerorder(int root){
    
    
    queue<int> q;
    q.push(root);
    while(!q.empty()){
    
    
        int front=q.front();
        cout<<n[front].data;
        num1++;
        if(num1<N)
            cout<<" ";
        q.pop();
        if(n[front].right!=-1) q.push(n[front].right);              //这里判断是为了让有效结点入队
        if(n[front].left!=-1)  q.push(n[front].left);
    }
}
int main(){
    
    
    cin>>N;
    for(int i=0;i<N;i++){
    
    
        char s[3];
        cin>>s;
        if(!strcmp(s,"-")){
    
    
            n[i].data=i;
            n[i].left=-1;
        }
        else{
    
    
            sscanf(s,"%d",&n[i].left);
            n[i].data=i;
            isexist[n[i].left]=true;
        }
        cin>>s;
        if(!strcmp(s,"-")){
    
    
            n[i].right=-1;
            n[i].data=i;
        }
        else{
    
    
            sscanf(s,"%d",&n[i].right);
            n[i].data=i;
            isexist[n[i].right]=true;
        }
    }
    int root;
    for(root=0;isexist[root];root++);
    layerorder(root);
    cout<<endl;
    inorder(root);       
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42835526/article/details/113698724