二叉树中序遍历不完全问题


void InOrder(SqBTree b)
{
    int i = 1, a[MaxSize], e = 1;
    stack<int>st;

    while (!st.empty() || b[e] != '\0')
    {
        if (b[e] != '#')
        {
            st.push(e);
            e = 2 * e;
        }
        else
        {
            e = st.top();
            cout << b[e];
            st.pop();
            e = 2 * e + 1;
        }
        if (b[e] == '\0')
            break;
    }
}

这段中序遍历输出的结果只有BCAD
不知道为什么
二叉树的存储结构是

"#ABD#C#E######F"

这样写看看:

void InOrder(SqBTree b)
{
    int i = 1;
    stack<int> st;
    
    while (!st.empty() || b[i] != '\0')
    {
        while(b[i] != '#')
        {
            st.push(i);
            i = 2 * i; // 向左子树移动,直到左孩子为空
        }
        
        if(!st.empty())
        {
            i = st.top();
            st.pop();
            cout << b[i] << ' '; // 访问节点
            i = 2 * i + 1; // 移动到右孩子
        }
    }
}

二叉树的生成代码是怎样的?