关于c++中序遍历的问题,如何解决?

c++写非递归的中序遍历时出错了,不知道怎么回事,自己感觉地址应该没问题
非递归中序遍历的函数


void PrintStack02(Node *head) {
    stack <Node> hashmap;
    /*cout << head->value;
    system("pause");*/
    while (!hashmap.empty()||head!=NULL) {
        if (head != NULL) {
            hashmap.push(*head);
            head = head->left;
        }
        else {
            *head = (hashmap.top());
            cout << head->value << "  ";
            hashmap.pop();
            *head = (hashmap.top());
            head = head->right;
            
        }
    }
}



创建二叉树函数


void CreatTree(Node* head) {
    Node* node01 = new Node(1);
    Node* node02 = new Node(2);
    Node* node03 = new Node(3);
    Node* node04 = new Node(4);
    Node* node05 = new Node(5);
    Node* node06 = new Node(6);
    Node* node07 = new Node(7);
    Node* node08 = new Node(8);
    Node* node09 = new Node(9);
    head->left = node01;
    head->right = node02;
    node01->left = node03;
    node01->right = node04;
    node02->left = node05;
    node02->right = node06;
    node03->left = node07;
    node03->right = node08;
    node04->left = node09;
}

img

错误很明显,head 只有为 NULL 时才会进入 else 分支,空指针是不能解引用的。代码思路错了。
下面是C语言版的代码,比着改改吧。

void inorder(BT *root)
{
    BT *stack[MAX_N], *p=root;
    int top = -1;
    while ( !(p==NULL && top==-1) ){
        while ( p!=NULL ){
            stack[++top] = p;
            p = p->lchild;
        }
        p = stack[top--];
        printf("%c ", p->nb);
        p = p->rchild;
    }
}