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; // 移动到右孩子
}
}
}
二叉树的生成代码是怎样的?