根据二叉树栈形式的中序遍历过程来反推二叉树

6
Push 1
Push 2
Push 3
Pop
Pop
Push 4
Pop
Pop
Push 5
Push 6
Pop
Pop
//找到的规律是:
//①第一个push的一定是根
//②对于所有的push:如果它的上一个操作为push,那么当前这个点就是上一个push的左儿子
//如果是pop那么当前点就是上一个pop的点的右儿子
int main(){
    
    
    scanf("%d",&n);
    memset(l,-1,sizeof l);memset(r,-1,sizeof r);
    cin>>last;cin>>id;
    root = id;
    p[top++] = root;
    for(int i=1;i<=2*n-1;i++){
    
    
        cin>>now;
        if(now=="Push"){
    
    
            scanf("%d",&p[top++]);
            if(last=="Pop") r[id] = p[top-1];
            else l[id] = p[top-1];
            id = p[top-1];
        }else{
    
    
            id = p[--top];
        }
        last = now;
    }
}

Guess you like

Origin blog.csdn.net/qq_44932835/article/details/114630211