关于二叉树先序遍历非递归算法传值的问题

问题遇到的现象和发生背景

正在学习数据结构,写了一个学生信息二叉树,先序总是出bug,请教一下大家,谢谢~

问题相关代码,请勿粘贴截图
//二叉树类下的一个成员函数
int PreOrderTraverse(BiTree T){
            int i;
            BiTree p,q;
            LinkStack S;S->data=p;
            stack mysta(S);
            p=T;
            cout<<"学号"<<'\t'<<"姓名"<<endl; 
            while(p||!mysta.StackEmpty(S)){
                while (p){
                    cout<<p->data.num<<'\t';
                    for(i=0;i<10;i++){
                        cout<<p->data.name[i];
                    }
                    if(i=10){
                        cout<<endl;
                    }            
                    if(!p->rchild) mysta.Push(S,p->rchild);
                    p=p->lchild;
                }
                if(!p){cout<<1;
                    mysta.Pop(S,q);cout<<2;
                    p=q;cout<<3;//应该是这一步没有赋值成功
                }
            }
            return 1;
        } 
//stack类里的出栈函数
int Pop(LinkStack &S,BiTree &e){//出栈 
            if(S==NULL) return ERROR;
            e=S->data;
            LinkStack p;p=S;
            S=S->next;
            delete p;
            return 1;
        } 
//主函数
int main(){
    student newvalue;
    BiTree T,Node[10];
    BiT myBiT(T);
    int num[]={0,1,2,3,4,5,6,7};
    char name[][7]={" ","aa","bb","cc","dd","ee","ff","gg"};
    for(int i=1;i<8;i++){
        strcpy(newvalue.name,name[i]);
        newvalue.num=num[i];
        Node[i]=myBiT.MakeNode(newvalue);
    }
    myBiT.MakeBinaryTree(Node[1],Node[2],Node[3]);//这里树形是这样的:             1
    myBiT.MakeBinaryTree(Node[2],Node[4],Node[5]);//                  2                           3
    myBiT.MakeBinaryTree(Node[5],Node[6],Node[7]);//      4                    5
    //myBiT.MakeBinaryTree(Node[4],NULL,NULL);//                           6         7
    T=Node[1];
    myBiT.PreOrderTraverse(T);
    return 0;
}
运行结果及报错内容

img


另外不知道为什么每一行最后都有一个乱码,求解